【问题标题】:How to include optional relations in C# using Code First Entity Framework如何使用 Code First Entity Framework 在 C# 中包含可选关系
【发布时间】:2015-04-22 09:00:43
【问题描述】:

拥有下面的数据库,我想检索 C# 中的所有积木,并将研讨会包括在那些有任何积木的 BrickBacks 上。

我设法检索了所有的砖块并通过简单地包含了砖块

context.Bricks.Include(b=>b.Back).ToList()

但在这种情况下,BrickBack 是一个抽象类,其子类可能包含一个 Workshop,但情况并非总是如此。

不幸的是我不能这样做

context.Bricks.Include(b=>b.Back).Include(b=>b.Back.Workshop).ToList()

如何做到这一点?

【问题讨论】:

  • 这行得通吗? : context.Bricks.Include(b=>b.Back.Workshop).ToList()

标签: c# entity-framework include code-first


【解决方案1】:

这可以工作context.Bricks.Include("Back").Include("Workshop").ToList()

如果Workshop_Id 在数据库中为空,WorkShop 将为空。

【讨论】:

    【解决方案2】:

    不可能。也许你可以从不同的角度来看待它:

    ConcreteBacks.Include(b => b.WorkShop)
                 .Include(b => b.Bricks)
                 .AsEnumerable()
                 .SelectMany(b => b.Bricks)
    

    这将从数据库中提取所有ConcreteBacks 和包含的数据,然后在扁平列表中返回Bricks

    AsEnumerable() 是必需的,因为 EF 仅包括结果集中根实体的数据。如果没有AsEnumerable(),这将是Brick,而ConcreteBacks 将被忽略。但是现在 EF 只知道AsEnumerable() 之前的部分,所以它包括了ConcreteBack 之外的所有内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      相关资源
      最近更新 更多