2011-10-27 84 views
2

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

Entity.EntitySet.Load() 

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

而且为什么包含有一个字符串,而不是一个枚举或为哪般?

回答

1

在EF中,您具有延迟加载和预先加载的概念。

  • 延迟加载意味着您​​在需要时加载数据。这是通过Load()方法调用完成的。
  • 预加载意味着你已经知道你将需要一些数据,所以你加载它在初始查询谷歌包括(字符串)。

Al tough包含一个字符串,这并不意味着你不能扩展它!

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

如果您真的想更进一步,您可以构建一个包含Lambda的方法,然后在执行到QueryProvider之前重新排列表达式树。然后你会有很好的静态输入。

+0

请阅读Lazy Loading和Eager loading。我现在遇到的问题(也许是另一个问题)是我的实体对象现在已经分离,在使用Include之后无法读取Entity.EntitySets。计数为零,初始加载显示为10.每当我需要EntitySet值时,是否必须重新加载? (希望这是有道理的)。 – Rob

+0

你可以使用你正在做的事情的代码示例更新你的开始帖子吗? –

+0

我想我在处理网页时犯了一个错误。当我不需要在Page_Load中时,我正在加载EntitySet。长话短说,但我想我需要在stackoverflow中提出另一个关于检查已经分离的实体的实体集数量的最佳方法。 – Rob

0

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

字符串被使用,因为MS选择了 - 没有意识到任何真正的限制。有关T4如何解决MVC中字符串操作的问题 - 也许他们会考虑改进/扩展它以支持更强大的输入。

+0

我真心希望他们在未来支持更强的打字。 – Rob