2014-03-07 95 views
4

我有2個表:實體框架6一一對多的關係,而不導航屬性

public class A 
{ 
    [Key] 
    public int AID {get;set;} 
    public string AName {get;set;} 
} 

public class B 
{ 
    [Key] 
    public int BID {get;set;} 
    public string BName {get;set;} 
    public int AID {get;set;} 

    [ForeignKey("AID")] 
    public A InstanceOfClassA {get;set;} 
} 

問題:A和B具有一個一對多的關係,這些表是在如下EF 6實施

當我從上下文中檢索B時,InstanceOfClassA始終爲空。

假設

因爲沒有導航屬性是指BA實體,因此,實體框架不延遲加載A檢索B時。

期待

因爲我並不需要從A訪問B,所以我想在A擺脫導航屬性,但仍保持B延遲加載A的能力。

注意

我看到一個帖子從Map Many to Many relationship without navigation property但是這並不在我的情況適合。

有沒有反正我可以強制延遲加載AB而不使用明確包括var b = context.B.Include(x => x.InstanceOfClassA);?也許自定義公約

編輯1

我嘗試使用約定的跟隨,仍然可以得到沒有運氣:

modelbuilder.Entity<B>() 
    .HasRequired<A>(x => x.InstanceOfClassA); 
+0

如果您打算投下我的問題,請花一些時間留下評論我的意見錯誤。 –

+0

我沒有看到這個問題有什麼問題。我花了一些時間研究同樣的事情,這樣我就不必在我從服務發送的所有內容中包含()。我想我最終在加載導航屬性的部分類中創建了一個構造函數。不知道如果這對你有用。 –

+0

我雖然關於手動加載依賴關係。但仍在尋找可以在未來項目中使用的解決方案。自定義公約,例如,但我不知道如何實現這種關係的自定義約定 –

回答

1

偷懶加載工作,你有virtual關鍵字標記導航屬性:

[ForeignKey("AID")] 
public virtual A InstanceOfClassA {get;set;} 
+0

工作就像一個魅力!我正在混合急切的加載和延遲加載 –

+0

這是專門針對懶惰加載和渴望之間的區別嗎? 「虛擬」似乎有必要讓它工作 – mmcrae