c# - EF Core 不会根据关系属性进行更新
问题描述
我对更新模型的 EF Core 一般行为有疑问。我有以下模型类:
public class Province
{
public int Id { get; set; }
public string Name { get; set; }
}
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public int? ProvinceId { get; set; }
public virtual Province Province { get; set; }
}
当我City
在 UI 中获取要编辑的内容时,我将Province
其包含在内,以便 UI 可以完美地显示模型。现在用户想要更改Province
for a City
。
当用户更改Province
下拉列表时,ProvinceId
模型的City
会发生变化,但Province
对象仍然是相同的。
因此,当我将模型发送到后端时,EF Core 不会更新模型。
示例 - 原始模型:
City: { Id: 1, Name: "City1", ProvinceId: 1, Province: { Id: 1, Name: "Province1" } }
UI中的更改模型:
City: {Id: 1, Name: "City1", ProvinceId: 2, Province: { Id: 1, Name: "Province1" } }
我希望 EF Core 将其更新ProvinceId
为2,但事实并非如此,因为该Province
属性仍然是旧的,除非我将Province
属性设置null
为更改不会正确应用。
有没有办法改变 EF Core 的这种行为,以便它会根据关系属性更新模型?
我正在使用 EF Core 5.0。
解决方案
有没有办法改变 EF Core 的这种行为,以便它会根据关系属性更新模型?
它已经在这样做了。在模型级别的关系由参考/导航定义。您发送了相关Province
信息,EFCity
根据该信息进行了更新。
您应该注意到City
您发送的数据的不一致 - 它的ProvinceId
值为 2,但随后您有Province
与1 相关的值。当 EF在模型级别(之前)Id
更新实体的值时,它会设置所有数据属性,并且值为设置为 2。但是,当它设置引用时,值更新为 1。所以这就是当你调用时发送到数据库的值。City
SaveChanges
ProvinceId
Province
ProvinceId
SaveChanges()
要更新父引用,只需发送外键属性,并避免引用本身 -
City: {Id: 1, Name: "City1", ProvinceId: 2 }
如果由于任何原因无法做到这一点,则Province
在更新City
.
推荐阅读
- authentication - 如何在没有 SSL 的情况下使用刷新令牌刷新谷歌访问令牌?
- mongoose - 猫鼬未定义错误
- vba - Excel VBA - 遍历范围并复制每个单元格 9 次
- css - 在 IE11 上,字母类型列表(list-style-type:lower-alpha)失去了缩进
- php - Laravel中许多列的总和
- android - 没有 Google Play 应用的数字商品的应用内计费
- c# - 实体框架:(?)问号的用途/含义是什么
- json - 从 csv 文件中解析字典的字符串列表
- node.js - NodeJS 和浏览器的打字稿
- java - bipush 如何在 JVM 中工作?