代码之家  ›  专栏  ›  技术社区  ›  smdrager

实体框架:获取不立即相关的对象

  •  3
  • smdrager  · 技术社区  · 15 年前

    我正在为我的.NET应用程序使用实体框架。我还可以返回对象及其直接相关的对象(非常方便),但我无法获取这些对象的对象。

     IEnumerable<Lot> i = (((ObjectSet<Car>)_carRepository.GetQuery())
                                        .Include(a => a.CarTypes).Take(10).ToList()
    

    这是可行的,我可以访问Cartypes,但是我不能理解如何访问与Cartypes相关联的表(例如,具有与Cartypes相关联的字段的表)。

    我试图使用一个join,但是我不知道如何使它正常工作。

    感谢所有帮助。

    2 回复  |  直到 15 年前
        1
  •  1
  •   user376618    15 年前

    include可以链接,但必须记住它使用的是字符串而不是lambda。如果你想要一个两级的include,那么你需要include(“cartypes.company”)。您还可以链接include语句,这意味着包括来自同一顶级的多个分支——例如include(“cartypes”).include(“someothertypefromthesamepartersascar”)。

    不过,您应该记住,深层include语句可能不会产生最好的性能,因为include的每个部分只会添加到您正在构建的一个查询中,因此您将得到一个更大、更复杂的查询,它会在封面下执行一系列连接。有时,在一个查询中包含一些内容,然后再发出第二个查询来获取其余的数据或类似的内容会更有效。

    使用EF4,您还可以设置延迟加载,这有时会使这类事情变得更容易(当然,它会产生多个往返而不是一个或两个非常大的往返)。

        2
  •  0
  •   taylonr    15 年前

    我相信你可以连锁包括…所以你可以吃点

    .Include(a => a.CarTypes.Company) 
    

    如果您只是使用每种类型中的一个或两个字段,一种可能是在数据库中创建一个视图。然后您可以将此视图添加到您的EF模型中,并直接访问这些属性。

    推荐文章