2

呼び出すAcceptChangesと、次のエラーが表示されます。

AcceptChangesオブジェクトのキー値が 内の別のオブジェクトと競合するため、続行できませんObjectStateManager。を呼び出す前に、キー値が一意であることを確認してくださいAcceptChanges

今、私はウェブをかなり検索しましたが、探していた答えが見つかりませんでした.

エンティティ オブジェクトの代わりに ID を使用して既に存在するエンティティを追加しないように設計されていることは知っていますが、それができない状況にあります。

一般的なインポートとエクスポートがあり、任意のエンティティ オブジェクトを渡すことができ、それを xml 形式にすることができます。逆に、任意の xml を指定して適切なエンティティを取得できます。カスタム形式で xml を作成する必要があったため、シリアライザーを使用できませんでした。

問題は、以前にメインエンティティに追加できた可能性のある、より深くネストされたエンティティがある場合にあり、その場で確認できないため、追加されます。同じエンティティが複数回追加される可能性があるという問題が発生します。

そして、さらに進んで変更を適用したい場合、エラーが発生します。

ここで、「同じエンティティを複数回追加する」という問題を防ぐという選択肢がなく、それらが追加された後に対処する必要があると考えてください。

から重複エンティティを削除してObjectStateManager、apply changes を呼び出せるようにするにはどうすればよいですか?

4

1 に答える 1

1

変更の適用を呼び出すことができるように、ObjectStateManager から重複エンティティを削除するにはどうすればよいですか?

ObjectStateManager重複を検索して解決することにより、手動でのみ。ObjectContextこれが、ObjectStateManager.ObjectStateManagerChangedイベント ハンドラーにエンティティを追加する前に、その問題を解決する必要がある理由です。

とにかく、あなたは間違った質問をしています。重複するエンティティを削除してもObjectStateManager問題は解決しません。エンティティを削除すると、オブジェクト グラフが壊れるだけです。また、削除されたエンティティへのすべての参照を修正し、残りの単一のエンティティ インスタンスを指すようにする必要があります。

この問題は通常、シリアライゼーション/デシリアライゼーションによって直接処理されます。自分で記述する場合は、同様に行う必要があります。

于 2013-01-04T14:39:38.277 に答える