Linq to Entity和Loading EntitySets

时间:2011-10-27 05:43:19

标签: c# linq-to-entities

这是我第一次尝试了解来自Net Tiers的Linq to Entity。苦苦挣扎但不了解它背后的一些逻辑......例如。 我什么时候使用:

Entity.EntitySet.Load()

context.Entity.Include("EntitySet").SingleOrDefault()

为什么Include采用字符串而不是枚举或排序?

2 个答案:

答案 0 :(得分:1)

在EF中,你有Lazy loading和Eager loading的概念。

  • 延迟加载意味着您​​可以在需要时加载数据。这是通过Load()方法调用完成的。
  • 预先加载意味着您​​已经预先知道您需要一些数据,因此您可以通过Include(字符串)将其加载到初始查询中。

Al tough Include需要一个字符串,这并不意味着你无法扩展这个!

T4是一件好事。在我参与的项目中,我们创建了一个EntityProperty类,该类包含实体上所有Navigational属性的静态属性。这样,如果属性名称发生更改,您至少会遇到编译错误。

如果你真的想更进一步,可以构建一个包含Lambda的Include方法,然后重新排列Expression树,然后再将它执行到QueryProvider。然后你会有很好的静态输入。

答案 1 :(得分:0)

Include通常用于加载相关表。加载显式加载请求的实体。

使用字符串是因为MS选择 - 不知道任何实际限制。排序T4如何解决MVC中字符串操作的问题 - 也许他们会改进/扩展它以支持更强的打字。