2013-08-03 25 views
1

我有一個有四個表的數據庫。 TableA和TableB是主表,TableC是多對多關係的表格。如何在多對多的關係中獲得熱切的加載?

  • 表A(IDTableA,名稱...)
  • 表B(IDTableB,名稱...)
  • 表C(IDTableA,IDTableB)

此創建三個實體,該EntityA有實體C與實體C的ICollection的具有EntitiesB的集合,所以當我試圖讓相關實體我這樣做:

myContext.EntityA.Include(a=>a.EntityB.Select(b=>b.EntityC)); 

但這個拋出和異常說收集是空的。

所以我想知道是否有可能做一個熱切的加載時,有一個表的多對多關係。

謝謝。

+0

什麼喲到底要?檢索A? B' ...? – AminSaghi

+0

我想在ENtityA中關聯所有的EntityB。但爲此,我需要使用EntityC,即兩個表之間的聯合,因爲EntityA沒有EntityB的導航屬性。 –

回答

1

通過Entity Framework中的多對多關聯,您可以在兩種實現中進行選擇:

  • 結表(C)是概念模型(類模型)的一部分和所述關聯是A—C—B(1-N-1)。 A不能擁有Bs的集合。
  • 聯結表不是概念模型的一部分,但實體框架透明地使用它來維持關聯A—B(n-m)。 A有一個Bs和B的集合,有一個As的集合。這隻有在表C只包含A和B的兩個FK列時纔有可能。

所以你不能同時擁有兩個。

你(顯然)選擇了第一個選項,那麼你將永遠有通過C查詢其他的entites,像

from a in context.As 
select new { a, Bs = a.Cs.Select(c => c.B) } 

from a in As.Include(a1 => a1.Cs.Select(c => c.B)) 
2

我認爲你需要這樣的:

var q = myContext.EntityC.Include("EntityA").Include("EntityB").ToList(); 

如果你想要一個A的BS:

var aId; // = something...; 

var bs = from c in q 
        where c.EntityAId == aId 
        select c.EntityBId; 

,只需反之亦然,如果你需要作爲B的:

var bId; // = something...; 

var eas = from c in q 
        where c.EntityBId == bId 
        select c.EntityAId; 
相關問題