新的DbContext对象是不是全新创建的?

时间:2012-08-21 13:03:53

标签: .net entity-framework c#-4.0 entity-framework-4

我一直在观察一个非常奇怪的案例。

foreach (var obj in objs)
{
     // a - unattached object
     DomainObject a = this.dict[key];
     using(var context = new DomainModelContainer())
     {
         this.SomeMethod(context, a);
     }
}

...
private void SomeMethod(DomainModelContainer context, DomainObject obj)
{
    // some code here with the query

    context.Entry(obj).State = EntityState.Unchanged;
}

毕竟我得到一个异常:ObjectStateManager中已存在具有相同键的对象。 ObjectStateManager无法使用相同的键跟踪多个对象。

我想知道DbContext的新实例是否真的是新的,如果没有,我怎么能完全“清除”它呢?

1 个答案:

答案 0 :(得分:0)

我没有设法找到上述问题的答案,但我设法解决了这个问题。

您需要做的就是每次都创建一个全新的对象:

private void SomeMethod(DomainModelContainer context, DomainObject obj)
{
    // some code here with the query
    var newObj = new DomainObject() { Id = obj.Id };

    context.Entry(newObj).State = EntityState.Unchanged;
}

由于某种原因,它现在可以正常工作。