当使用EF6时,我使用延迟加载,所以我从来没有遇到过这个问题,但是对于EFCore,我不知道单个查询是否可以实现这一点。
我有以下类结构
class A { public B b; }
class B { public ICollection<C> list_c; }
class C { public ICollection<D> list_d; }
abstract class D { public long c_id; }
class Da { public E e; }
class Db { public F f; }
我需要一个包含所有D
个对象的列表,但分别可以访问其e
和f
个属性。我现在有一个有效的查询,我在_db.D
的{{1}}列表中使用下面的查询的前半部分来查询c_id
,但是通过这种方法,我发送了一个查询以获取所有c_id
&#39;然后每种类型一个查询(我有4种类型)。
我想知道我是否可以通过一个看起来像这样的电话来实现它:
_db.As.Include(x => x.b)
.ThenInclude(x => x.list_c)
.ThenInclude(x => x.list_d)
// some magic here
.FirstOrDefaultAsync(x=> x.Id = model.Id);
编辑:
目前这就是我列表的方式:
var a = await _db.As.Include(x => x.b)
.ThenInclude(x => x.list_c)
.FirstOrDefaultAsync(x=> x.Id = model.Id);
var result = await _db.Ds.OfType<Da>()
.Include(x=>x.e)
.Where(x=>a.b.list_c.Any(y=>y.Id == x.c_id))
.Select(x=>(D)x)
.Concat(_db.Ds.OfType<Db>()
.Include(x=>x.f)
.Where(x=>a.b.list_c.Any(y=>y.Id == x.c_id))
.Select(x=>(D)x)).
.ToListAsync();
答案 0 :(得分:0)
如果您有这个选项,我建议不要使用Entity Framework Core。检查https://github.com/aspnet/EntityFrameworkCore/wiki/Roadmap处的路线图 - 它目前没有延迟加载到其(非常恼人的)缺点的名称。
您可以在.NET 4.6项目中拥有数据访问层,并拥有您的消费项目,即使消费是基于Core,也可以毫无困难地引用该项目。