EF6:使用外键关系修改实体属性-我是否需要更改ID或相关对象,或两者都更改?

Mar*_*cel 5 c# sql-server entity-framework foreign-key-relationship

我仅通过修改ID来修改代码中实体的外键属性:

ElementData.ServiceLevelId = parameter.ServiceLevelId;
Run Code Online (Sandbox Code Playgroud)

坚持后,我发现当相应的导航属性ServiceLevelnull偶然的时候,这只能按预期工作。如果它仍然保留“旧”对象,则更改将不会影响数据库。

这意味着,我需要做

ElementData.ServiceLevelId = parameter.ServiceLevelId;
ElementData.ServiceLevel = null; //Force the update to the Database
Run Code Online (Sandbox Code Playgroud)

这是否意味着更改对象比仅更改ID“更强大”?在这种情况下,是否应该始终将相关对象设置为null?

更新(根据Tim Copenhaver的评论):所讨论的实体是现有实体的副本(具有上述修改)。它使用Automapper进行复制,并映射除主键和一个无关属性以外的所有内容。自动映射器将创建浅拷贝AFAIK。因此,副本的情况将是在将更新的ID和未修改的对象引用添加到上下文时不匹配。我猜想,EF然后决定“对象引用更强”。

Tim*_*ver 2

只要数据映射正确,更改任一属性都有效。EF 足够智能,可以查看哪些属性已更改并忽略另一个属性。不过,您必须小心 - 如果 ElementData.ServiceLevel.Id 不等于 ElementData.ServiceLevelId,您将收到一些模糊的错误。

如果您无法保存,则您的映射图层可能不正确。如果您可以发布 ElementData 类的映射以及有关如何进行保存的更多代码,我们可以帮助您排除故障。