如何阻止實體框架保存子物件
使用實體框架時,儲存實體可能會無意中嘗試保存關聯的子實體。若要修正此問題並僅保留指定實體,請考慮以下方法:
使用 EntityState
您可以將子物件的 EntityState 設為Unchanged,通知實體框架保持不變:
using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); }
利用外國鍵
更靈活的方法涉及利用外鍵。定義實體時,指定子實體上的外鍵屬性和父實體上對應的主鍵屬性:
public class City { public int Id { get; set; } public string Name { get; set; } } public class School { public int Id { get; set; } public string Name { get; set; } [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } }
在實體插入期間,明確設定子物件的外鍵屬性並設定父物件的外鍵屬性導航屬性設定為null:
public School Insert(School newItem, int cityId) { if (cityId <= 0) { throw new Exception("City ID not provided"); } newItem.City = null; newItem.City_Id = cityId; using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.SaveChanges(); } }
透過遵循這些技術,您可以控制子物件的持久性,確保僅保存所需的實體並防止潛在的完整性問題。
以上是如何防止實體框架在保存父實體時保存子實體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!