【问题标题】:How to renew ObjectContext in Entity Framework?如何在实体框架中更新 ObjectContext?
【发布时间】:2015-07-25 17:28:11
【问题描述】:

我有一些大型查询(插入和更新),对于与内存相关的问题,我决定将繁重的查询减少为 1000 条记录的小批量插入和更新查询。我的代码是这样的:

for(/*200 batch of 1000 insert queries*/)
{
    Add1000Records(objectContext);
    objectContext.Dispose();
    objectContext= null;
    objectContext= new MyObjectContext();
}

当插入第一条 1000 条记录并更新 objectContext 以插入第二条 1000 条记录时,我遇到以下错误:

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

【问题讨论】:

  • 删除带有 dispose 和 null 的行。这是没有意义的,因为您正在分配新的上下文。循环后处理

标签: c# .net sql-server entity-framework


【解决方案1】:

我宁愿在您的 Add1000records 方法中管理它,而不是在您的插入方法之外管理上下文生存期。还可以使用 c# "using" 语句,该语句将被转换为 try - finally 块。最后,即使抛出异常,也保证调用 dispose。此外,也许在您的函数调用中,您以某种方式保留对您保存的对象的引用,然后您使用它们/重新附加它们

【讨论】:

    【解决方案2】:

    默认情况下,Entity Framework 对导航属性使用延迟加载。这里 dispose 方法存在问题当一些代码稍后尝试使用延迟加载的导航属性时,它会失败,因为此时上下文已被释放。

    for(/*200 batch of 1000 insert queries*/)
    {
        Add1000Records(objectContext);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2010-09-29
      相关资源
      最近更新 更多