次のデータモデルがあります。
私のビジネス ロジックは切り離されたエンティティで動作するため、GraphDiff を使用して更新を実行しています。PerfModes/CalcPoints の関連付けを更新できません。概念的には、Block は CalcPoints と PerfModes を所有していますが、CalcPoints は任意の数の PerfModes に関連付けることができます。
ブロックレベルで更新しようとしています。私が思いついたコードはエラーをスローしませんが (他の試行ではエラーが発生しました)、PerfModes/CalcPoints の関連付けも更新しません。
container.UpdateGraph(block, map => map
.OwnedCollection(b => b.HistPoints)
.OwnedCollection(b => b.CalcPoints)
.OwnedCollection(b => b.PerfModes, with => with
.OwnedCollection(p => p.FilterCriterion, with2 => with2
.OwnedCollection(fc => fc.Filters, with3 => with3
.AssociatedEntity(f => f.OperatorType)
.AssociatedEntity(f => f.CalcPoint))))
.AssociatedCollection(p => p.CalcPoints)
);
私はおそらく EF グラフと GraphDiff を完全には理解していません。多対多の PerfModes/CalcPoints の関連付けが正しく更新されるようにするにはどうすればよいですか?
編集
andyp の回答を確認した後、GitHub から最新バージョンの GraphDiff を取得し、次のマッピングを試しました。
container.UpdateGraph(block, map => map
.OwnedCollection(b => b.CalcPoints)
.OwnedCollection(b => b.PerfModes,
with => with.AssociatedCollection(pm => pm.CalcPoints)));
これにより、PerfModes/CalcPoints の関連付けが正しく更新されます。元のマッピングに戻しましたが、関連付けが更新されないという問題がまだ見られたので、モデル全体を一度に更新しようとすると問題があるようです。複数の UpdateGraph 呼び出しを行っても問題ありませんが、それらを分割するにはどうすればよいでしょうか?
関連するコードと失敗した単体テストの要点を次に示します。
EF で生成されたコンテナー クラスを継承して、プロキシの作成を無効にして独自のコンテキストを作成しています。それはGraphDiffに問題を引き起こしますか?