在LINQ to Entities中是否存在与LINQ to SQL中的DataLoadOptions
类相对应的版本?基本上我想要一个地方来存储所有的贪婪加载配置,而不必为所有的LINQ to Entities查询添加.Include()
调用。或者如果有更好的解决方案,也非常欢迎。
TIA,
Benjy
在LINQ to Entities中是否存在与LINQ to SQL中的DataLoadOptions
类相对应的版本?基本上我想要一个地方来存储所有的贪婪加载配置,而不必为所有的LINQ to Entities查询添加.Include()
调用。或者如果有更好的解决方案,也非常欢迎。
TIA,
Benjy
Entity Framework不支持在整个“ObjectContext”中设置贪婪加载选项。但是,您可以在部分类中声明所有需要的“IQueryable”属性,并使用包含选项。例如:
public IQueryable<Order> Orders {
get {
return OrderSet.Include("OrderDetails");
}
}
DataLoadOptions
的等价物。为什么呢?有几个原因:
Customer
有Orders
时,我希望Orders
成员代表该客户的订单(延迟加载或非延迟加载)。在其他地方定义过滤器(by AssociateWith
)容易被忘记。我会在需要的时候在何处过滤它们。这导致了最后一个反对:DataLoadOptions
是有状态的,大多数错误都是由于意外状态引起的。DataLoadOptions
以一种影响后续查询的方式改变了DataContext
的状态。我更喜欢在需要的地方定义急切加载。打字很便宜,但错误很昂贵。尽管如此,为了完整起见,我应该提到Muhammad Mosa在EF版本的DataLoadOptions中做了一些努力。不过,我从未尝试过。
我意识到你可能想避免重复的代码。但是如果您需要在多个地方使用完全相同的查询,则已经重复了代码,无论是否定义了“全局”包含。集中的急切加载配置是伪DRY性。很快,当不希望进行急切加载时,您会发现自己被自己绊倒了,但是,该操作已进行配置!