首頁 > 後端開發 > C++ > 如何防止實體框架持久化子物件?

如何防止實體框架持久化子物件?

Mary-Kate Olsen
發布: 2025-01-03 00:14:38
原創
963 人瀏覽過

How Can I Prevent Entity Framework from Persisting Child Objects?

在實體框架中抑制子物件持久化

在實體框架中,通常假設保存實體會自動將其子物件持久化為出色地。然而,在某些情況下,可能需要阻止這種行為。這在處理可能不直接對應於資料庫模式的扁平資料時特別有用。

讓我們考慮一個假設場景,其中 School 實體包含 City 屬性。當從平面檔案填入 School 物件時,City 屬性可以引用查找表來確定地理位置。但是,由於這些城市定義已經存在於資料庫中,因此實體框架在保存學校時無需再次插入它們。

為了防止實體框架在這種情況下持久保留子對象,有兩種方法:

方法1:使用EntityState

一種方法涉及手動設定子級的EntityState反對不變。這指示實體框架在儲存作業期間忽略子物件。以下是範例:

using (var context = new DatabaseContext())
{
    context.Set<School>().Add(newItem);
    // Set the City property to Unchanged
    context.Entry(newItem.City).State = EntityState.Unchanged;
    context.SaveChanges();
}
登入後複製

方法 2:使用外鍵

更優雅、更靈活的方法是在實體定義中使用外鍵屬性。在子屬性上定義外鍵屬性以明確指定其與外部實體的關係。例如:

public class School
{
    [ForeignKey("City_Id")]
    public City City { get; set; }
    [Required]
    public int City_Id { get; set; }
}
登入後複製

這種方法允許您在物件建立期間明確指定外鍵值,通知實體框架子物件已經持久化。透過在儲存時將City 屬性設為null,可以從上下文圖中省略City 屬性:

newItem.City = null;
context.Set<School>().Add(newItem);
context.SaveChanges();
登入後複製

透過採用這兩種方法之一,您可以阻止實體框架嘗試儲存子對象,確保只有所需的實體被持久化到資料庫中。

以上是如何防止實體框架持久化子物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板