我仅通过修改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进行复制,并映射除主键和一个无关属性以外的所有内容。自动映射器将创建浅拷贝AFAIK。因此,副本的情况将是在将更新的ID和未修改的对象引用添加到上下文时不匹配。我猜想,EF然后决定“对象引用更强”。