使用EF Core包含所有继承类中的所有属性

时间:2017-08-29 18:04:06

标签: c# entity-framework entity-framework-core

当使用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个对象的列表,但分别可以访问其ef个属性。我现在有一个有效的查询,我在_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();

1 个答案:

答案 0 :(得分:0)

如果您有这个选项,我建议不要使用Entity Framework Core。检查https://github.com/aspnet/EntityFrameworkCore/wiki/Roadmap处的路线图 - 它目前没有延迟加载到其(非常恼人的)缺点的名称。

您可以在.NET 4.6项目中拥有数据访问层,并拥有您的消费项目,即使消费是基于Core,也可以毫无困难地引用该项目。