2014-02-10 38 views
1

我有一個的EntityFramework物體的集合,例如:的EntityFramework CodeFirst實例化集合

public class User 
{ 
    public virtual ICollection<Page> Pages { get; set; } 
} 

什麼是最好的做法 - 離開它這樣或構造函數實例集。如果(或別的東西嗎?)我實例化集合到一個默認的空白列表如下:

public class User 
{ 
    public virtual ICollection<Page> Pages { get; set; } 

    public User() 
    { 
     Pages = new List<Page>(); 
    } 
} 

然後我得到的DevExpress /代碼分析警告有關在構造函數中實例化虛擬財產 - 有沒有做這樣危險嗎?

回答

0

不要實例化它,讓POCO對象保持原樣,並讓EF按預期對其進行操作。 EF會爲你實例化它們。您應該知道EF將填充通過動態代理虛擬標記的導航屬性。

+0

這個工作,如果你的對象是預先存在的,但什麼時候你最初是在創建你的對象?如果每個對象都沒有在構造函數中實例化,那麼當手動創建對象時,您必須在繼承鏈中實例化所有集合,或者在執行LINQ查詢之前檢查每個ienumerable是否爲空? – William

0

這將是一個更好的決定:

private readonly IList<Page> _page; 

public User(IEnumerable<Page> page) 
{ 
    _page = new List<Page>(page); 
} 

public IList<Page> Page 
{ 
    get { return _page; } 
} 

要小心使用約ICollection<>IEumerable<>IList<>,看到更多的信息here

+0

但我認爲EntityFramework僅與ICollections兼容? – William

+0

不可以,您可以使用它 – Ehsan

+1

或ISet set = new HashSet () – Elisabeth

相關問題