c# - EF6 : Modifying an entity property with a foreign key relation - Do I need to change the Id or the related object or both?

标签 c# sql-server entity-framework foreign-key-relationship

我在代码中修改实体的外键属性,仅通过修改 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 类的映射以及有关您如何进行保存的更多代码,我们可以帮助解决问题。

关于c# - EF6 : Modifying an entity property with a foreign key relation - Do I need to change the Id or the related object or both?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656895/

相关文章:

从单个表中生成多个前 1 的 SQL 查询

c++ - 使用 ODBC 的 MSSQL 数据库中的垃圾 varchar 条目

sql - 如何选择 varbinary 类型的记录?

c# - 为什么要在 UpdateAsync 上设置 CreationTime 和 CreatorUserId?

asp.net - Mysql 连接器总是获取未设置为对象实例的对象引用

c# - 为什么 Staples.com 的 HttpClient GET 超时?

c# - XamarinStore 已停止

c# - 以编程方式转到不同 View 的按钮? C#(xamarin)

c# - 在特定线程上运行工作

c# - 无法使用 'dotnet ef...' - 无法解析指定的框架版本 '2.0'