编译的查询错误:没有从实体到'System.Data.Objects.ObjectContext的隐式转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译的查询错误:没有从实体到'System.Data.Objects.ObjectContext的隐式转换相关的知识,希望对你有一定的参考价值。

我正在创建一个委托来从数据库中检索所有客户记录。我已经以这种方式使用了编译查询,但出于某种原因,我在使用EF的Visual Studio 2012中遇到了这样的错误。

错误:类型'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 });
答案

没有从'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命名空间的版本。

以上是关于编译的查询错误:没有从实体到'System.Data.Objects.ObjectContext的隐式转换的主要内容,如果未能解决你的问题,请参考以下文章

错误:找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序

实体框架,LINQ 查询

从'const char *'到'char *'的无效转换[-fpermissive]; VTK-7.1.1编译错误

无法定义使用'dynamic'的类或成员,因为编译器需要输入'System.Runtime.CompilerServices.DynamicAttribute'类型(代

无法加载文件或程序集'System.ValueTuple'

实体查询'Like'不支持int列