2

WCFを介した自己追跡エンティティでEntityFrameworkを使用しています。

多対多の関係を持つCustomerとPriceMatrixの2つのエンティティがあります(顧客は多くの過去の価格マトリックスを持つことができ、マトリックスは顧客のグループ間で共有できます)

クライアントには単一のPriceMatrixがあり、それを更新してサーバーに送り返します。サーバーは、このPriceMatrixを更新するか、複製して複製を更新するかを選択する前に、このPriceMatrixが他の顧客間で共有されているかどうかを確認する必要があります。

私が抱えている問題は、更新されたPriceMatrixをアタッチする前にPriceMatrixをロードして調べているため、ApplyChanges()を呼び出すと次のエラーが発生することです。

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

小切手をコメントアウトすると(したがって、PriceMatrixをロードしない場合)、すべてが正常に機能します。

私が本当にやりたいのは、その状態を調べた後、PriceMatrixをアンロードしてから、クライアントから受け取った更新されたPriceMatrixを添付することです。

4

1 に答える 1

2

そのような場合Detachは、のメソッドを使用してみてくださいObjectContext。これはSTEの既知の問題ですAcceptChanges。同じキーを持つSTEが以前にコンテキストにロードされていない必要があります。

于 2011-02-02T13:11:23.207 に答える