【问题标题】:Include all the properties from all the inherited classes using EF Core使用 EF Core 包含来自所有继承类的所有属性
【发布时间】:2017-08-29 18:04:06
【问题描述】:

在使用 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,我使用下面查询的前半部分获取,但是通过这种方法,我发送一个查询来获取所有@987654329 @'s 然后每种类型一个查询(我有 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();

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 我希望能够使用完整的框架,但该项目应该只是 .NET Core。这几乎是我正在编写的最复杂的查询,因此我可以使用当前的解决方案,直到他们添加延迟加载。
  • 出于好奇,为什么决定只做核心?
  • 很想解释一下,但不是我的决定:)
  • 相信!在这种情况下,我建议密切关注路线图。可悲的是,他们甚至没有承诺今年会发生延迟加载,但他们会尽力而为:(
  • 我正在遵循路线图(主要是因为延迟加载),但实际上 this 是我应该等待的功能 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多