了解EF 的子物件處理
預設情況下,實體框架(EF) 會在儲存或儲存期間嘗試將子實體與主實體一起儲存插入操作。但是,在某些情況下,此行為可能會導致問題。
問題描述
保存實體時,EF 也會嘗試保存其子實體。然而,在某些情況下,子實體可能已經存在或不打算插入。此行為會導致完整性問題並可能適得其反。
從保存中排除的原因
開發人員可能希望從保存中排除子對象的原因有多種手術。例如,子物件可能代表資料庫中已存在的查找值,並且插入重複項是不可取的。
外鍵覆蓋:綜合解決方案
到防止 EF 保存子對象,首選解決方案是利用外鍵屬性。透過為關係指定外鍵,EF 知道子實體是由單獨的列標識的,而不是物件本身。
在儲存作業期間,明確將子物件設為 null 並指派適當的外鍵關鍵值。這種方法清楚地向 EF 表示在保存過程中不應修改子物件。
public School Insert(School newItem, int cityId) { if (cityId <= 0) { throw new Exception("City ID not provided"); } newItem.City = null; // Exclude child object from save newItem.City_Id = cityId; // Specify foreign key value using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.SaveChanges(); return newItem; } }
外鍵法的優點
外鍵法提供了幾個優點:
彈性:
允許控制子物件的存在,而無需將屬性設為 null。 擴展性:輕鬆適應更複雜的情況關係,例如多對多,其中子物件被明確管理。 透過採用外鍵方法,開發人員可以更好地控制 EF 的子物件處理,從而使他們能夠實現所需的資料庫操作,而不會遇到不可預見的問題。以上是如何防止實體框架在儲存作業期間保存子物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!