我有以下数据模型:
我的业务逻辑适用于分离的实体,因此我使用 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 出现问题吗?