EF6:修改具有外键关系的实体 属性 - 我是否需要更改 Id 或相关对象或两者?

EF6: Modifying an entity property with a foreign key relation - Do I need to change the Id or the related object or both?

我正在修改代码中实体的外键 属性,仅通过修改 Id:

ElementData.ServiceLevelId = parameter.ServiceLevelId;

我发现,在坚持之后,当相应的导航 属性 ServiceLevel 意外地 null 时,这只会按预期工作。如果它仍然持有 "old" 对象,则更改不会影响数据库。

这意味着,我需要做

ElementData.ServiceLevelId = parameter.ServiceLevelId;
ElementData.ServiceLevel = null; //Force the update to the Database

这是否意味着,更改对象 "stronger" 而不是仅更改 ID? 在这种情况下,我是否应该始终将相关对象设置为 null?

更新(根据 Tim Copenhaver 的评论):有问题的实体是现有实体的副本(经过上述修改)。它使用 Automapper 进行复制,并映射除主键和一个无关 属性 之外的所有内容。 Automapper 创建一个浅拷贝 AFAIK。因此,副本的情况是更新的 Id 和未触及的对象引用在将其添加到上下文时不匹配。我猜,EF 然后决定 "object reference is stronger".

只要您的数据映射正确,更改 属性 中的任何一个都可以。 EF 足够聪明,可以看到哪些属性发生了变化并忽略另一个。不过你必须要小心——如果 ElementData.ServiceLevel.Id 不等于 ElementData.ServiceLevelId,你会得到一些模糊的错误。

如果您遇到无法保存的问题,则您的映射层可能不正确。如果您可以 post ElementData 的映射 class 以及有关您如何进行保存的更多代码,我们可以帮助解决问题。