Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EF Core包含所有继承类中的所有属性_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

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

C# 使用EF Core包含所有继承类中的所有属性,c#,entity-framework,entity-framework-core,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

在使用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; }
编辑:

目前,我是这样列出的:

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();
var a=await\u db.As.Include(x=>x.b)
.然后包括(x=>x.list\u c)
.FirstOrDefaultAsync(x=>x.Id=model.Id);
var result=await _db.Ds.of type()
.包括(x=>x.e)
其中(x=>a.b.list\u c.Any(y=>y.Id==x.c\u Id))
.选择(x=>(D)x)
.Concat(_db.Ds.of type()
.包括(x=>x.f)
其中(x=>a.b.list\u c.Any(y=>y.Id==x.c\u Id))
.选择(x=>(D)x))。
.ToListAsync();

如果您有选择,我建议您不要使用实体框架核心。查看路线图-它目前没有惰性加载来指出它(非常恼人)的缺点


您可以将您的数据访问层放在.NET 4.6项目中,并让您的消费项目(即使消费基于Core)毫无困难地引用该项目。

如果您有选择,我建议不要使用Entity Framework Core。查看路线图-它目前没有惰性加载来指出它(非常恼人)的缺点


您可以将数据访问层放在.NET 4.6项目中,并让您的消费项目(即使消费基于Core)毫无困难地引用该项目。

我希望能够使用完整的框架,但该项目假定仅为.NET Core。这几乎是我正在写的最复杂的查询,因此我可以继续使用当前的解决方案,直到他们添加延迟加载。出于好奇,为什么决定只使用核心?我很想解释一下,但不是我的决定:)收到!在这种情况下,我建议关注路线图。遗憾的是,他们甚至没有承诺在今年实现延迟加载,但他们会尽最大努力:(我正在遵循路线图(主要是因为延迟加载),但实际上这是我应该等待的功能:)我希望能够使用完整的框架,但该项目应该是.NET核心。这几乎是我正在写的最复杂的查询,因此我可以继续使用当前的解决方案,直到他们添加延迟加载。出于好奇,为什么决定只使用核心?我很想解释一下,但不是我的决定:)收到!在这种情况下,我建议关注路线图。可悲的是,他们甚至没有承诺使今年的懒惰加载发生,但他们会尽最大努力:(我遵循路线图(主要是因为懒惰加载),但实际上是我应该等待的特点:)不是我的第一选择,但作为一种选择,你可以考虑使用RAW SQL,用于困难查询的视图或存储过程。这将允许您在2.1中编写包含/包含派生类型的文件,但作为替代方案,您可以考虑使用原始SQL、视图或存储过程来进行疑难查询。这将允许您在2.1版本中对派生类型编写Include/thenclude
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();