LINQ to Entities的DataLoadOptions等效?

时间:2012-08-25 16:31:39

标签: c# linq entity-framework linq-to-entities

对于LINQ to Entities,LINQ to SQL中是否存在DataLoadOptions类的版本?基本上我想有一个存储所有急切加载配置的地方,而不必为我的所有LINQ to Entities查询添加.Include()调用。或者,如果有人有一个更好的解决方案,那么肯定也会对此开放。

TIA,
本吉

2 个答案:

答案 0 :(得分:5)

实体框架不支持整个“ObjectContext”的预先加载设置。但是您可以使用部分类中的include选项声明所有必需的'IQueryable'属性。例如:

public IQueryable<Order> Orders {
  get {
    return OrderSet.Include("OrderDetails");
  }
}

答案 1 :(得分:5)

就我个人而言,我很高兴没有(官方)EF等效DataLoadOptions。为什么?原因如下:

  • 使用例外的方式使用它们太容易了,请参阅MSDN page的备注部分。
  • 我不喜欢过滤子集合的概念。如果CustomerOrders,我希望Orders成员代表该客户的订单(懒惰与否)。其他地方(AssociateWith)定义的过滤器很容易被遗忘。我会在需要的时间和地点过滤它们。这导致了最后的反对意见:
  • 最重要的是:它是有状态,并且大多数错误都是由意外状态引起的。 DataLoadOptions以稍后查询受影响的方式更改DataContext的状态。我更喜欢在需要的地方和时间定义急切加载。打字很便宜,错误很贵。

然而,为了完整起见,我应该提到穆罕默德·莫萨确实在EF version of DataLoadOptions做了一些努力。我从来没有尝试过。

我意识到你可能想要防止重复的代码。但是,如果您在多个地方需要形状相同的查询,那么您已经在重复代码,无论是否包含“全局”定义。中央急切加载配置是伪DRY-ness。很快你会发现自己在需要急切加载时绊倒自己的脚,但是,它已经配置好了!