原因是:“在创建模型时不能使用上下文”

本文关键字:不能 上下文 模型 创建 | 更新日期: 2023-09-27 18:16:32

我是MVC和实体框架的新手。

我有一个简单的Azure MVC 3 web应用程序。我使用实体框架和Ninject,我的数据存储在SQL数据库中。

每当我尝试对存储库进行并发请求时,我都会得到此错误消息。例如,一个存储库是图像标题,所以当页面加载时,如果有多个图片,通常会出现以下消息:

"在创建模型时不能使用上下文。"

这是我的连接字符串:

<add name="EFDbContext" connectionString="Data Source=.'SQLEXPRESS;Initial Catalog=TheDBName; Integrated Security=SSPI; MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>

对于Ninject,当我绑定接口时,我已经尝试将其更改为使用InTransientScope和InRequestScope。没有区别。

this.ninjectKernel.Bind<ICaptionsRepository>().To<EFCaptionRepository>().InTransientScope();

失败的部分在这里:

Caption foundCaption = currentCaptionRepository.Captions.FirstOrDefault(a => a.ID == pictureID);

如果您还需要其他信息来帮助查找问题,请告诉我。

干杯!

编辑:这是堆栈跟踪 <>之前在System.Data.Entity.Internal.LazyInternalContext.InitializeContext ()在System.Data.Entity.Internal.InternalContext.Initialize ()在System.Data.Entity.Internal.InternalContext。GetEntitySetAndBaseTypeForType entityType(类型)1. System.Data.Entity.Internal.Linq.InternalSet的初始化()1. System.Data.Entity.Internal.Linq.InternalSet"get_internalcontext ()1. System.Data.Entity.Infrastructure.DbQuery"system.linq.iqueryable.get_provider ()在System.Linq.Queryable。FirstOrDefault[TSource](IQueryable ' 1 source, Expression ' 1 predicate)在MVCProject.WebUI.Controllers.ImageController。GetImageByIDWithSize(字符串id)在C:'MVCProject'MVCProject'MVCProject. web 'Controllers'ImageController.cs:line 131在MVCProject.WebUI.Controllers.ImageController。GetImage(字符串id)在C:'MVCProject'MVCProject'MVCProject. web 'Controllers' imageconcontroller .cs:line 215@ lambda_method(Closure, ControllerBase, Object[])在System.Web.Mvc.ReflectedActionDescriptor。执行(ControllerContext, ControllerContext,字典' 2个参数)在System.Web.Mvc.ControllerActionInvoker。InvokeActionMethod(ControllerContext, ControllerContext, ActionDescriptor, ActionDescriptor,字典' 2个参数)在System.Web.Mvc.ControllerActionInvoker.c__DisplayClass15.b__12 ()在System.Web.Mvc.ControllerActionInvoker。调用actionfilter过滤器,ActionExecutingContext preContext, Func ' 1 continuation

原因是:“在创建模型时不能使用上下文”

底层DbContext的生活方式是什么?我猜你的存储库依赖于db上下文,如果你的DbContext被注册为一个单例,这将爆炸。如果是这种情况,对DbContext请求进行作用域,创建DbContext成本低廉,并且不打算将其保留为单个实例。