私はこの問題で1週間以上立ち往生しています。うまくいけば、誰かが私を正しい方向に向けることができます。
まず、スキーマの簡単な説明から始めます。
資産1--->1住所*->1地域*->1地域*->1国
パッケージ1->*アセット
自己追跡エンティティ(STE)+WCFを使用します。
手順:
- アセットのリストについては、データストアに電話してください。
- パッケージのリストについては、データストアに電話してください。
- ユーザーがパッケージを選択し、それにいくつかのアセットを割り当てます。
- パッケージを保存します。
ステップ2では、呼び出しはアドレスの積極的な読み込みを使用します。
from p in context.Assets.Include("Address.Area.Region.Country")
これは、電話をかけようとしたときのエラーです
context.Packages.ApplyChanges(package)
オブジェクトのキー値がObjectStateManager内の別のオブジェクトと競合しているため、AcceptChangesを続行できません。AcceptChangesを呼び出す前に、キー値が一意であることを確認してください。
編集
詮索した後、これはSTEの問題であることがわかりました。ここで概説したように、同じエンティティの複数のインスタンスを含むグラフを永続化できないという問題があります。これが私の質問です。
エンティティコレクションにエンティティを追加するにはどうすればよいですか。新しいエンティティには、すでにコレクションにあるものと同じキーを含む関連エンティティが含まれている場合があります。つまり、同じ住所、地域、地域、または国のエンティティを含む可能性のある新しいアセットを追加します。
これが私の制約です:
- UIに影響するため、ナビゲーションコレクションを使用する必要があります。
- データセットが大きすぎるため、関係するすべてのエンティティをプリフェッチできません。
- 履歴を保持し、それを使用して変更を「元に戻す」には、いつでもエンティティのスナップショットを撮ることができなければなりません。
私はDiegoBVegaによって提案された可能な解決策を知っていますが、それらは私の解決策に使用できるオプションではありません。他に何かアイデアはありますか?