5

所以說我有兩個實體,PostPostHistory。每當我創建或編輯帖子時,我都想創建一個精確副本作爲PostHistory以記錄對帖子所做的所有更改。說後實體的定義如下:如何使用EF4 Code-First一次創建兩個關聯的實體

public class Post 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
    public virtual ICollection<PostHistory> PostHistory{ get; set; } 
} 

當我創建我的第一個Post的問題就來了。例如,如果我試試這個:

Post post = new Post { Text = "Blah" }; 
context.Posts.Add(post); 
PostHistory history = new PostHistory { Text = "Blah"}; 
context.PostHistory.Add(history); 
post.PostHistory.Add(history); 

這將失敗,因爲因爲這兩個posthistory是新的實體,Post.PostHistory爲空,由於它沒有尚未初始化。我能看到這樣做的唯一方法是首先將post提交給數據庫,然後將history提交到數據庫,但我不明白爲什麼執行2個單獨的插入應該是必要的。

如果我有一個初始化ICollectionList<T>一切工作正常,但強制實施List<T>原因等問題,幾乎沒有代碼優先教程爲此被迫發起一個構造函數。

那麼處理這種情況的最佳方法是什麼?

回答

4

您可以在客戶端代碼本身初始化列表:

Post post = new Post 
{ 
    Text = "Blah" 
    PostHistory = new List() 
    { 
     new PostHistory { Text = "Blah" } 
    } 
};   
context.Posts.Add(post); 
context.SaveChanges(); 

然而,有什麼錯初始化構造函數中的集合,它實際上是建議,因爲它把你從初始化它所有的客戶端代碼。

+0

將列表初始化爲列表可行,但這不是一個好選擇。原因是你不能將列表轉換爲EntityCollection (所以我可以檢查集合是否已經被加載)。 – KallDrexx 2011-02-18 01:22:34

相關問題