5

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

TIA,
本杰

4

2 回答 2

5

Entity Framework 不支持整个“ObjectContext”的预加载设置。但是您可以在部分类中使用包含选项声明所有必需的“IQueryable”属性。例如:

public IQueryable<Order> Orders {
  get {
    return OrderSet.Include("OrderDetails");
  }
}
于 2012-08-25T17:21:34.190 回答
5

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

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

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

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

于 2012-08-25T20:39:58.563 回答