2013-05-31 184 views
0

我想弄清楚,如何實現導航屬性到我的實體......但是我的導航性能總是空:EF CodeFirst - 添加ICollection的導航屬性

我已經設置了兩個實體:

實體1包含此行:

public int Id { get; set; } 
    public ICollection<BestellterArtikel> BestellteArtikel { get; set; } 

我的第二個實體看起來是這樣的:

public int Id { get; set; } 
    public int BestellungId { get; set; } 
    public Bestellung BestellteArtikel { get; set; } 

進一步包括我此行我的覆蓋OnModelCreating法:

modelBuilder.Entity<Bestellung>().HasMany(e => e.BestellteArtikel).WithRequired(e => e.Bestellung); 

我做了什麼錯?我忘記了一些重要的事情嗎?它是否必須如此複雜?我必須在每個屬性的覆蓋方法中添加一行嗎?

回答

1

這裏是我的解決方案:

實體1:

public virtual ICollection<BestellterArtikel> BestellteArtikel { get; set; } 

實體2:

public virtual Bestellung BestellteArtikel { get; set; } 

編輯:

你也必須修改您的映射:

modelBuilder.Entity<Bestellung>().HasMany(e => e.BestellteArtikel).WithRequired(e => e.BestellteArtikel); 

而不是參考BestellteArtikel財產,你提到的類型!

+0

叫什麼名字?如果您的意思是「虛擬」,那麼它就是一個C#關鍵字,並且在EF模型中使用它意味着延遲加載引用。 –

+0

等一下!你的映射有問題。我編輯了我的答案 –

+0

不,您還沒有正確理解我的意思:我有一個名爲BestellterArtikel的實體(照顧R!)與財產「Bestellung」和一個實體Bestellung與ICollection「BestellteArtikel」(沒有R!)。 。我不能重命名這些屬性,就像你在代碼中做的那樣...;) – Jannik

1

你是什麼意思的「始終爲空」?
如果您在嘗試從數據庫中讀取空值,
請記住,當您查詢上下文時,需要加載導航屬性, 或使用EF延遲加載。

閱讀this瞭解更多信息。

+0

當我用Find(1)請求我的第一個實體時(我在請求之前在DB中創建了一些示例實體)並將鼠標移動到導航上財產「BestellteArtikel」,其無效,我不能擴大它(無論是懶惰還是熱切加載),儘管我有2-3個應該在那裏的實體。 – Jannik

+0

var bestellung = db。AlleBestellungen.FirstOrDefault(p => p.Id == 1);這就是我試圖做的(使用虛擬關鍵字) – Jannik

+0

所以,請閱讀我的鏈接並添加'.Include(「」)到您的查詢 – Liel