Tag: graphdiff

使用GraphDiff更新多对多关联

我有以下数据模型: 我的业务逻辑适用于分离的实体,所以我使用GraphDiff来执行更新。 我在更新PerfModes / CalcPoints关联时遇到问题。 从概念上讲,Block拥有CalcPoints和PerfModes,但CalcPoints可以与任意数量的PerfModes相关联。 我正在尝试在Block级别进行更新。 我提出的代码不会抛出任何错误(而其他尝试也会),但它也不会更新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, […]

由于一个或多个外键属性不可为空,因此无法更改关系

在使用EF更新期间出现以下错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。 有没有一般的方法来查找哪些外键属性导致上述错误? [更新] 对于以下代码导致上述错误的一种情况(我在断开连接的环境中工作,所以我使用graphdiff更新我的对象图),当它想要运行_uow.Commit(); : public void CopyTechnicalInfos(int sourceOrderItemId, List targetOrderItemIds) { _uow = new MyDbContext(); var sourceOrderItem = _uow.OrderItems .Include(x => x.NominalBoms) .Include(“NominalRoutings.NominalSizeTests”) .AsNoTracking() .FirstOrDefault(x => x.Id == sourceOrderItemId); var criteria = PredicateBuilder.False(); foreach (var targetOrderItemId in orderItemIds) { int id = targetOrderItemId; criteria = criteria.OR(x => x.Id == id); } […]