[英]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
时,这只能按预期工作。 如果它仍然保留“旧”对象,则更改将不会命中数据库。
这意味着,我需要这样做
ElementData.ServiceLevelId = parameter.ServiceLevelId;
ElementData.ServiceLevel = null; //Force the update to the Database
这是否意味着,更改对象比仅更改ID更“强”? 在这种情况下,我是否应始终将相关对象设置为null?
更新(根据Tim Copenhaver的评论) :有问题的实体是现有实体的副本(带有上述修改)。 它使用Automapper进行复制,并映射除主键和一个不相关属性之外的所有内容。 Automapper创建浅拷贝AFAIK。 因此,副本的情况将是更新的Id和未触摸的对象引用在将其添加到上下文时不匹配。 我猜,EF然后决定“对象引用更强”。
只要数据映射正确,更改任一属性都将起作用。 EF非常聪明,可以看到哪些属性发生了变化而忽略了另一个属性。 但是你必须要小心 - 如果ElementData.ServiceLevel.Id不等于ElementData.ServiceLevelId,你会得到一些模糊的错误。
如果您在保存时遇到问题,则映射层可能不正确。 如果您可以发布ElementData类的映射以及更多关于如何进行保存的代码,我们可以帮助您进行故障排除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.