防止實體框架子物件插入
實體框架經常嘗試將相關子物件與指定實體一起保存,這可能會導致完整性問題。為了克服這個問題並防止子物件插入,可以採用多種方法。
可為空的外鍵屬性
預設情況下,實體框架假設外鍵不可為空。若要允許將子物件設為 null,需要明確地將外鍵屬性標記為可為 null。這可以透過在模型類別中將 required 屬性設為 false 來實現。
範例:
public class School { public int Id { get; set; } public string Name { get; set; } public int? CityId { get; set; } public City City { get; set; } } public class City { public int Id { get; set; } public string Name { get; set; } }
但是,將外鍵屬性設為 null 可能會導致驗證錯誤。
實體條目狀態管理
另一種方法是在實體框架上下文中手動設定子物件的狀態。這通知上下文子物件已經存在,不應保存。
範例:
public School Insert(School newItem) { using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); return newItem; } }
外鍵法
較穩健的方法是在模型類別中顯式定義外鍵。透過在屬性中指定外鍵列名稱,實體框架將識別關係並僅插入父物件。
範例:
public class School { public int Id { get; set; } public string Name { get; set; } [ForeignKey("City_Id")] public int City_Id { get; set; } public City City { get; set; } } public class City { public int Id { get; set; } public string Name { get; set; } }
結論
使用可為空的外鍵屬性、管理實體條目狀態或明確定義外鍵提供阻止實體框架插入子物件的方法。合適的方法取決於具體要求和模型設計。
以上是如何防止實體框架插入子物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!