我正在创建一个委托来从数据库中检索所有客户记录。我以这种方式使用了编译查询,但出于某种原因,我在Visual Studio 2012中使用EF得到了这样的错误。
错误:类型'HTML5Basics.NorthwindDataContext'不能在泛型类型或方法'System.Data.Objects.CompiledQuery.Compile(System.Linq.Expressions.Expression>)'中用作类型参数'TArg0'。没有从'HTML5Basics.NorthwindDataContext'到'System.Data.Objects.ObjectContext'的隐式引用转换。
这是什么错误以及如何解决此错误?
这是代码:
public static Func<NorthwindDataContext, string, IEnumerable<SimpleCustomer>> CustomersByCity =
CompiledQuery.Compile<NorthwindDataContext, string, IEnumerable<SimpleCustomer>>(
(NorthwindDataContext db, string city) =>
from c in db.Customers
where c.City == city
select new SimpleCustomer { ContactName = c.ContactName });
答案 0 :(得分:1)
没有从'HTML5Basics.NorthwindDataContext'到'System.Data.Objects.ObjectContext'的隐式引用转换。
表示两种类型之间没有转换。
在.NET 4.5中,EF5有一个System.Data.Objects命名空间,其中包含CompiledQuery.Compile函数。 System.Data.Linq命名空间中还有一个。
他们有不同的签名:
System.Data.Linq命名空间: (取自MSDN http://msdn.microsoft.com/en-us/library/bb548737.aspx):
public static Func<TArg0, TResult> Compile<TArg0, TResult>(
Expression<Func<TArg0, TResult>> query)
where TArg0 : DataContext
System.Data.Objects命名空间(来自.pdb):
public static Func<TArg0, TResult> Compile<TArg0, TResult>
(Expression<Func<TArg0, TResult>> query)
where TArg0 : ObjectContext
基本上你有两个选择:
1)使用System.Data.Linq命名空间中的那个。
2)将ObjectContext(或继承的类型)传入System.Data.Objects命名空间的版本。