LINQ to Entities等效的DataLoadOptions?

ben*_*njy 5 c# linq linq-to-entities entity-framework

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

TIA,
Benjy

小智 5

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

public IQueryable<Order> Orders {
  get {
    return OrderSet.Include("OrderDetails");
  }
}
Run Code Online (Sandbox Code Playgroud)


Ger*_*old 5

就个人而言,我很高兴没有(官方)EF相当于DataLoadOptions.为什么?原因如下:

  • 以抛出异常的方式使用它们太容易了,请参阅MSDN页面的备注部分.
  • 我不喜欢过滤子集合的概念.当CustomerOrders,我希望Orders会员代表客户订单(懒惰或不懒).在别处(by AssociateWith)定义的过滤器很容易被遗忘.我会在需要的时间和地点过滤它们.这导致了最后的反对意见:
  • 最重要的是:它是有状态的,大多数错误都是由意外状态引起的.以后来的查询受到影响的方式DataLoadOptions更改DataContext状态.我更喜欢在需要的地方和时间定义急切加载.打字很便宜,错误很贵.

尽管如此,为了完整起见,我应该提到Muhammad Mosa确实在EF版本的DataLoadOptions中付出了一些努力.我从来没有尝试过.

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