繁体   English   中英

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时,这只能按预期工作。 如果它仍然保留“旧”对象,则更改将不会命中数据库。

这意味着,我需要这样做

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM