是啥原因导致:“创建模型时无法使用上下文。”?

Posted

技术标签:

【中文标题】是啥原因导致:“创建模型时无法使用上下文。”?【英文标题】:What is causing: "The context cannot be used while the model is being created."?是什么原因导致:“创建模型时无法使用上下文。”? 【发布时间】:2011-12-04 16:30:06 【问题描述】:

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

我有一个简单的 Azure MVC 3 Web 应用程序。我正在使用 Entity Framework 和 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) 在 System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 在 System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 在 System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() 在 System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 源,Expression`1 谓词) 在 C:\MVCProject\MVCProject\MVCProject.WebUI\Controllers\ImageController.cs:line 131 中的 MVCProject.WebUI.Controllers.ImageController.GetImageByIDWithSize(String id) 在 C:\MVCProject\MVCProject\MVCProject.WebUI\Controllers\ImageController.cs:line 215 中的 MVCProject.WebUI.Controllers.ImageController.GetImage(String id) 在 lambda_method(闭包,ControllerBase,对象 []) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary`2 参数) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext 控制器上下文,ActionDescriptor actionDescriptor,IDictionary`2 参数) 在 System.Web.Mvc.ControllerActionInvoker.c__DisplayClass15.b__12() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func`1 延续)

【问题讨论】:

刚刚添加到我的帖子中。谢谢! 失败的代码在哪里调用?是仅在您重新启动应用程序时发生还是一直发生?发生这种情况时,有多少并发请求正在运行? 我有一个页面控制器。它构建页面,调用 GetImage(string id) 函数。 GetImage 函数然后访问 CurrentCaptionRepository 并尝试检索标题。主页有两个图像,通常(但不总是)会导致问题。每当我尝试构建一个包含多张图片的页面(因此对图片有两个请求)时,都会发生这种情况。 【参考方案1】:

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

【讨论】:

嗨,我将它绑定为 InRequestScope。你是这个意思吗?感谢您回复此事。 听起来不错,但我仍然把钱放在线程/共享状态问题上 :-) 您的控制器如何获取存储库实例?依赖注入? 我猜您正在使用 Ninject mvc 扩展,以便您的控制器正确注册。你能发布你的控制器代码吗? 控制器代码如下: public class PageController : Controller private IPagesRepository currentPageRepository;公共 PageController(IPagesRepository pageRepository) currentPageRepository = pageRepository;这是我的 Action 函数中崩溃的行: Page currentPage = currentPageRepository.Pages.FirstOrDefault(a => a.Id == id);谢谢! 我尝试编辑原始帖子以添加代码,但一直被拒绝。

以上是关于是啥原因导致:“创建模型时无法使用上下文。”?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Identity 出现“创建模型时无法使用上下文”异常

LINQ 和 EF6:创建模型时无法使用上下文

在 Visual Studio 2015 中重命名时导致“无法解决的冲突”的原因是啥?

在 Windows 机器上运行 Postgresql 11 时导致“更多无法识别...”错误的原因是啥?

导致 HTML 输出错误的原因是啥?

无法创建目录或文件是啥原因导致的