C# 如何使用代码优先实体框架在C中包含可选关系
有了下面的DB,我想检索C中的所有砖块,并包括那些砖块包上的车间 我通过简单的操作,成功地取回了所有的砖块并包括了砖块C# 如何使用代码优先实体框架在C中包含可选关系,c#,entity-framework,include,code-first,C#,Entity Framework,Include,Code First,有了下面的DB,我想检索C中的所有砖块,并包括那些砖块包上的车间 我通过简单的操作,成功地取回了所有的砖块并包括了砖块 context.Bricks.Include(b=>b.Back).ToList() 但在本例中,BrickBack是一个抽象类,其子类可能包含一个车间,但情况并非总是如此 不幸的是,我不能这么做 context.Bricks.Include(b=>b.Back).Include(b=>b.Back.Workshop).ToList() 如何做到这一点 这
context.Bricks.Include(b=>b.Back).ToList()
但在本例中,BrickBack是一个抽象类,其子类可能包含一个车间,但情况并非总是如此
不幸的是,我不能这么做
context.Bricks.Include(b=>b.Back).Include(b=>b.Back.Workshop).ToList()
如何做到这一点
这可能适用于context.Bricks.IncludeBack.IncludeWorkshop.ToList
如果数据库中的车间Id为空,车间将为空。不可能。也许你可以从另一个角度来看待它:
ConcreteBacks.Include(b => b.WorkShop)
.Include(b => b.Bricks)
.AsEnumerable()
.SelectMany(b => b.Bricks)
这将从数据库中提取所有concreteback和包含的数据,然后以平铺列表的形式返回砖块
AsEnumerable是必需的,因为EF只包括结果集中根实体的数据。如果没有可计算的,这将是砖块,而混凝土背将被忽略。但现在EF只知道一个数字之前的部分,所以它包括了后面的所有内容。这有用吗?:context.Bricks.Includeb=>b.Back.Workshop.ToList