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# 如何使用代码优先实体框架在C中包含可选关系_C#_Entity Framework_Include_Code First - Fatal编程技术网

C# 如何使用代码优先实体框架在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() 如何做到这一点 这

有了下面的DB,我想检索C中的所有砖块,并包括那些砖块包上的车间

我通过简单的操作,成功地取回了所有的砖块并包括了砖块

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