我见过很多关于如何克服这个问题的文章,都与CTP4有关,或者添加了我自己的扩展方法。
是否有一个“官方”EF4包含方式在include中使用lambda表达式(对于第一级关系以及第二级和更多级别)或者它最终是否包含在RTM中?
它有一个 - 我很乐意学习如何做到这一点,因为现在在我的代码中使用lambda表达式(使用#system.data.entity#system.data.linq)仍然给了我:
无法将lambda表达式转换为类型'string',因为它不是委托类型 on:
var customers = from c in
context.Customers.Include(c=>c.Phone)
答案 0 :(得分:213)
实体框架4.1的RTM版本实际上在EntityFramework.dll
文件中包含扩展方法,用于通过Include
函数对lambda进行预先加载。只需在项目中包含DLL,您就应该能够编写如下代码:
var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();
请记住添加Import / Using语句以包含 System.Data.Entity 命名空间。否则编译器找不到扩展方法。 E.g:
using System.Data.Entity;
有关详细信息,请参阅此ADO.NET team blog文章。
答案 1 :(得分:86)
虽然问题暗示了这一点,但对于有同样问题的其他人,如果他们不能在.Include中使用lambdas,请确保你拥有:
using System.Data.Entity;
答案 2 :(得分:5)
暂时没有正式支持在RTM中包含lambda表达式。我正在使用this。
当我们谈论CTP4时,我们意味着实体框架功能。它是比EF4更新的API。它主要包括Code First和其他一些改进。