0

私は非常に奇妙なケースを観察してきました。

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の新しいインスタンスが本当に新しいのかどうか疑問に思います。そうでない場合は、どうすれば完全に「クリア」できますか?

4

1 に答える 1

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;
}

何らかの理由で今は正常に動作します。

于 2012-08-21T14:45:17.917 に答える