3

我目前正在学习更多关于Linq-To-Entities的信息 - 特别是关于急切和懒惰加载的时刻。Linq-To-Entities包括

proxy.User.Include("Role").First(u => u.UserId == userId) 

这应该加载用户以及用户拥有的任何角色。我有一个问题,但我也有一个问题。这只是创建一个简单的模型来了解L2E

我的印象是,这是为了使事物强类型 - 所以为什么我必须写“角色”?看来,如果我改变了表的名称,那么这将不会产生编译错误......

我的错误是这样的:

The specified type member 'Roles' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

下面的解决方案允许现在我编写代码:

proxy.User.Include(u => u.Role).First(u => u.UserId == userId) 

哪个更好!

+0

EF 4支持这一点。 http://stackoverflow.com/questions/5159621/ef-code-first-includex-x-properties-entity-a-1-many-association – Vas 2013-07-31 11:16:24

回答

5
  1. 包含是一个提示加载,它不强制加载。
  2. 在引用您希望被Include加载的东西之前,请始终检查IsLoaded属性。
  3. 有许多方法可以将强类型对象放在include语句中,但Entity Framework没有解决此问题的方案。谷歌类似于:实体框架ObjectQueryExtension包括
+0

我会非常感兴趣的方式来获得一个强类型的对象在包括声明。它是无类型的,并导致运行时错误,这让我很头疼。 – 2009-10-24 13:37:37

+0

我刚刚将我的答案更新为Google for的短语。具体来说,“ObjectQueryExtension”就是你正在寻找的魔法。 – 2009-10-24 13:39:30

+0

谢谢你,ObjectQueryExtension是完美的。刚刚放下它,它现在编译安全,错误已经消失 – Paul 2009-10-24 13:53:30