20

ObjectContextにエンティティをアタッチしようとしています。これを行うと、次のInvalidOperationExceptionがスローされます。

An object with the same key already exists in the ObjectStateManager.
The ObjectStateManager cannot track multiple objects with the same key.

オブジェクト状態マネージャーをチェックインしましたが、アイテムが存在しません。

//Data context is actually the object context.
ObjectStateEntry contact;
while ( //Should only work once since it should be true if the item was attached
          !DataContext.ObjectStateManager.
          TryGetObjectStateEntry(Contact, out contact)
      )
      DataContext.Attach(Contact); //Here is the exception thrown.

または、この抽象的な例を見て、それが理にかなっているかどうか教えてください。

EntityState state = Contact.EntityState; //Detached

DataContext.Attach(Contact); //Throws the exception.
DataContext.AttachTo("Entities.Contacts", Contact); //Throws the Exception

var detached = DataContext.ObjectStateManager.
                   GetObjectStateEntries(EntityState.Detached);
//InvalidArgumentException - detached entities cannot be in the obj state mgr

VBでの回答も歓迎します。

4

4 に答える 4

7

Contactエンティティに同じEntityKeyを持つ2つの子エンティティがありますか?たとえば、Contactエンティティから同じキーを持つ2つのAddressエンティティに移動することは可能ですか?

MergeOptions.NoTrackingを指定すると、コンテキストは、同じキーを持つエンティティを含むデタッチされたオブジェクトグラフを喜んで返します。ただし、同じオブジェクトグラフをアタッチすると、System.InvalidOperationExceptionがスローされます。

コンテキストにアタッチしているオブジェクトグラフ全体を見て、重複するキーを持つオブジェクトがあるかどうかを確認することをお勧めします。

于 2009-08-10T19:50:56.243 に答える
5

答えは (そして、これが問題であることを知らなかったので、これが問題であることは言及しませんでした)、追跡されたエンティティにナビゲーション プロパティを設定すると、新しいエンティティが自動的に追加されます。

Dim s = context.States.FirstOrDefault()
Dim a As New Address
a.State = s

Dim state = a.EntityState '= Added

私はそれを知らなかったので、なぜ実体が追跡されているのか疑問に思っていました. 質問全体を削除しますが、役立つ可能性のある他の回答の努力があるため、ここに残します。終了する必要があると思われる場合は、終了するように投票してください。

于 2009-11-15T00:48:21.087 に答える
4

アプリケーション内で同じ問題が発生しました。

ObjectStateManager TryGetObjectStateEntry メソッドを使用して問題を解決しました

実際、EntityState プロパティは開発者を誤解させています。Detached と表示しているのに、エラーを起こしているのが面白い。

于 2009-08-28T09:04:19.227 に答える
0

EntityオブジェクトのEntityKeyプロパティを設定しているか確認してください。設定する場合は、既存のエンティティ オブジェクトからコピーしていないことを確認してください。

于 2016-10-27T14:36:18.683 に答える