使用兄弟包含加载EF实体

时间:2016-08-11 07:25:45

标签: c# entity-framework oracle11g

我必须从数据库加载一个实体,我需要急切地将几乎所有来自数据库的关系加载到该实体中。我尝试使用Include但没有成功。这是代码:

var thingy = _ctx.MASTERANDCOMMANDER
            .Include(x => x.RED) 
            .Include(x => x.RED.Select(y => y.RED_ONE)) 
            //.Include(x => x.RED.Select(y => y.RED_TWO)) 
            .Include(x => x.GREEN) 
            .Include(x => x.GREEN.Select(y => y.GREEN_ONE))
            .Include(x => x.GREEN.Select(y => y.GREEN_ONE.Select(z => z.GREEN_ONE_BIG))) 
            //.Include(x => x.GREEN.Select(y => y.GREEN_TWO)) 
            //.Include(x => x.GREEN.Select(y => y.GREEN_THREE)) 
            .SingleOrDefault(x => x.ID == "someId");

如果我取消注释其中任何一个包含,该应用程序将抛出: System.Exception:Oracle 11.2.0.2.0不支持APPLY

使用EntityFramework 6和Oracle 11.2.0.2.0。 我无法升级EF或Oracle。

如何将GREEN_TWO等关系加载到thingy?

编辑:从左到右显示的所有关系都是一对多。例子:

  • RED(1到*)RED_ONE
  • GREEN_ONE(1到*)GREEN_ONE_BIG

2 个答案:

答案 0 :(得分:2)

您始终可以使用Join代替Include,e。 G:

var thingy = _ctx.MASTERANDCOMMANDER
    .Join(RED, x => x.MASTERANDCOMMANDERID, x => REDID, (m, r) => m)...etc...

等等,您需要从数据库中获取RED作为另一个单一实体。

答案 1 :(得分:0)

也许正在使用.ThenInclude()会有所帮助

var thingy = _ctx.MASTERANDCOMMANDER
                .Include(x => x.RED) 
                .ThenInclude(red => red.RED_ONE)
                .Include(x => x.GREEN) 
                .ThenInclude(green => green.GREEN_ONE)
                .ThenInclude(greenOne => greenOne.GREEN_ONE_BIG)            
                .Where(x => x.ID == "someId").SingleOrDefault();