Mar*_*cel 5 c# sql-server entity-framework foreign-key-relationship
我仅通过修改ID来修改代码中实体的外键属性:
ElementData.ServiceLevelId = parameter.ServiceLevelId;
Run Code Online (Sandbox Code Playgroud)
坚持后,我发现当相应的导航属性ServiceLevel是null偶然的时候,这只能按预期工作。如果它仍然保留“旧”对象,则更改将不会影响数据库。
这意味着,我需要做
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然后决定“对象引用更强”。
只要数据映射正确,更改任一属性都有效。EF 足够智能,可以查看哪些属性已更改并忽略另一个属性。不过,您必须小心 - 如果 ElementData.ServiceLevel.Id 不等于 ElementData.ServiceLevelId,您将收到一些模糊的错误。
如果您无法保存,则您的映射图层可能不正确。如果您可以发布 ElementData 类的映射以及有关如何进行保存的更多代码,我们可以帮助您排除故障。
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |