Application_Start超时?

时间:2013-03-11 18:13:08

标签: asp.net entity-framework asp.net-mvc-4 global-asax

我有一段代码可以在Application_Start上运行,用于将演示数据播种到我的数据库中,但我得到一个例外:

  

ObjectContext实例已被释放,不能再用于需要连接的操作

尝试枚举我的某个实体DB.ENTITY.SELECT(x => x.Id == value);

我已经检查了我的代码,并且在操作之前我没有处理我的上下文,下面是我当前实现的概述:

protected void Application_Start()
{
   SeedDemoData();
}

public static void SeedDemoData()
{
   using(var context = new DBContext())
   {
       // my code is run here.
   }
}

所以我想知道Application_Start是否超时并强制我的db上下文在它完成之前关闭它的连接。

注意:我知道代码,因为我在不同的地方使用它,并且它经过了单元测试,并且在那里工作没有任何问题。

关于这可能是什么问题的任何想法?或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

在调查问题几个小时之后,我发现它是由数据上下文在不同线程上进行挂起更改引起的。我们当前的数据库升级/迁移实现在我们的App_Start方法的并行线程上运行,所以我注意到我正在尝试枚举的实体正在被同时更改,即使它们正在不同的数据上下文中运行EF注意到访问实体并返回不正确的错误消息,说明datacontext已被释放,而实际异常是实体状态被修改但未保存,则出现错误。

我的问题的实际解决方案是将所有种子数据函数移动到数据库升级/迁移脚本,以便实时仅在一个地方修改实体。