繁体   English   中英

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

[英]Include all the properties from all the inherited classes using EF 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属性。 目前,我在使用以下查询的前半部分获取的c_id列表中查询_db.D ,有一个有效的查询,但是使用这种方法,我发送了一个查询以获取所有c_id和那么每种类型一个查询(我有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();

如果可以的话,我建议不要使用Entity Framework Core。 https://github.com/aspnet/EntityFrameworkCore/wiki/Roadmap上检查路线图-它目前没有延迟加载,这是(非常令人讨厌的)缺点的名称。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM