[英]EF Core does not update based on the relation property
我對更新 model 的 EF Core 一般行為有疑問。 我有以下 model 類:
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; }
}
當我在 UI 中獲取要編輯的City
時,我包含了Province
,因此 UI 可以完美地顯示 model。 現在用戶想要將Province
更改為City
。
當用戶更改Province
下拉列表時, City
model 的ProvinceId
ID 會發生變化,但Province
object 保持不變。
因此,當我將 model 發送到后端時,EF Core 不會更新 model。
示例 - 原始 model:
City: { Id: 1, Name: "City1", ProvinceId: 1, Province: { Id: 1, Name: "Province1" } }
在 UI 中更改了 model:
City: {Id: 1, Name: "City1", ProvinceId: 2, Province: { Id: 1, Name: "Province1" } }
我希望 EF Core 將ProvinceId
更新為2 ,但事實並非如此,因為Province
屬性仍然是舊屬性,除非我將Province
屬性設置為null
,否則將無法正確應用更改。
有什么方法可以改變 EF Core 的這種行為,所以它會根據關系屬性更新 model 嗎?
我正在使用 EF Core 5.0。
有什么方法可以改變 EF Core 的這種行為,所以它會根據關系屬性更新 model 嗎?
它已經在這樣做了。 在 model 級別關系由引用/導航定義。 你發送了一個相關的Province
,EF 就根據它更新了City
。
您應該注意到您發送的City
數據的不一致 - 它的ProvinceId
值為 2,但是您擁有Id
1 的相關Province
。當 EF 在 model 級別(在SaveChanges
之前)更新City
實體的值時,它會設置所有數據屬性, ProvinceId
的值設置為 2。但是,當它設置Province
引用時, ProvinceId
值更新為 1。所以這就是調用SaveChanges()
時發送到數據庫的值。
要更新父引用,只需發送外鍵屬性,並避免引用本身 -
City: {Id: 1, Name: "City1", ProvinceId: 2 }
如果由於任何原因無法做到這一點,請在更新City
之前將Province
引用設置為 null 。
可能會跟隨重塑的 model 類對你有用!
public partial class Province
{
public Province()
{
City = new HashSet<City>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<City> City { get; set; }
}
public partial class City
{
public int Id { get; set; }
public string Name{ get; set; }
public int? ProvinceId{ get; set; }
public virtual Province ProvinceNavigation { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.