[英]When adding a new object to mydbcontext, one of the object members (a List<>) is set as null after I query for the object later
因此,在我設置好要在MyDbContext db
設置的對象后,如下所示:
Article newBlogPost = new Article()
{
ArticleComments = new List<Comment>()
};
db.BlogPosts.Add(newBlogPost);
db.SaveChanges();
稍后,我將以不同的視圖訪問同一對象,如下所示:
model.articleList = db.BlogPosts.ToList();
進入調試模式時,我檢查model.articleList
的值,它只是null
,而不是新實例化的List<Article>
。 就像當我將這個List<Article>
對象添加到數據庫時一樣,只要我調用db.SaveChanges();
,它就會立即將其db.SaveChanges();
請注意,我在此Article
對象中還有其他更簡單的屬性,例如字符串,整數等,可以正確保存。
DbContext
是否不允許將容器存儲在內部? 還是我做錯了什么?
在C#中工作時,我們習慣於處理對象及其內部狀態,因此ORM不保存集合可能是一個彎腰的事實。
從根本上講,這是因為關系數據庫不存儲集合(與對象數據數據庫相反)。 在RDBMS中,父記錄是獨立實體。 子記錄“具有”對其父項的引用。 相反,在對象空間中,父對象包含“具有”的子對象,並且子對象可以完全忽略其父對象。 這是ORM跨越我們的“鴻溝”。
現在考慮有關EF的一些事情:
當查詢DbSet
(例如db.BlogPosts
)時,EF從數據庫數據中填充new
對象。 它不會重用已緩存的對象。 緩存的對象(如果有)位於DbSet.Local
集合中。
當您從數據庫中獲取對象時,EF不會為其集合屬性創建集合,除非您也通過例如Include
或lazy loading來加載這些集合。
因此,除非您自己(例如在對象的構造函數中)初始化這些集合,否則已卸載的集合為null
。
因此, db.BlogPosts.ToList()
創建了全新的對象。 有關在保存時具有的非空集合的任何信息都將丟失,因為無法存儲此信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.