我有一个包含四个表的数据库。 TableA和TableB是主表,TableC是多对多关系的表。
这创建了三个实体,EntityA有一个实体C的ICollection,而实体C有一个EntitiesB的集合,所以当我尝试获取相关的实体时,我这样做:
myContext.EntityA.Include(a=>a.EntityB.Select(b=>b.EntityC));
但是这个抛出和异常表明集合是空的。
所以我想知道当有一个多表关系的表时,是否可以进行急切的加载。
感谢。
答案 0 :(得分:2)
我认为你需要这个:
var q = myContext.EntityC.Include("EntityA").Include("EntityB").ToList();
如果你想要A的B:
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;
答案 1 :(得分:1)
在Entity Framework中有多对多的关联,您可以在两种实现之间进行选择:
A—C—B
(1-n-1)。 A不能有B的集合。 A—B
(n-m)。 A有一个B的集合,B有一个As的集合。仅当表C仅包含A和B的两个FK列时才可以这样做。所以你不能同时拥有两者。
您(显然)选择了第一个选项,因此您必须始终通过C
查询其他参与者,例如
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))