2013-12-15 78 views
0

我正在使用实体框架6并且有异常“LINQ to Entities does not recognized the method'System.String AsNonUnicode(System.String)'method”。这是我做的。实体框架6和AsNonUnicode方法

我有表的客户与定义为varchar(254)(非Unicode)的电子邮件列。

在我的映射我有以下行:

Property(t => t.Email).IsUnicode(false); 

当我把我的查询是这样的:

var q = context.Customers.Where(t => t.Email == "[email protected]").Select(t => t.FirstName); 

一切都很好,不变的是非Unicode。但是,如果我使用以下代码:

string email = "[email protected]"; 
var q = context.Customers.Where(t => t.Email == email); 

生成的变量是Unicode一个,导致不使用索引。

所以,我尝试使用EntityFunctions.AsNonUnicode扩展,这似乎是专为这样的:

string email = "[email protected]"; 
var q = context.Customers.Where(t => t.Email == EntityFunctions.AsNonUnicode(email)); 

但是,我得到了一个例外LINQ到实体无法识别方法“System.String AsNonUnicode(系统.String)方法异常,当试图实际查询数据。

我在做什么错?

+0

您确定您的EntityFunctions.AsNonUnicode是EntityFramework.dll中的一个,而不是从System.Data.Entity DLL?它来自哪个名称空间(应该是System.Data.Entity.Core.Objects)?如果您在项目中引用了System.Data.Entity.dll,则应删除它。 – Pawel

+0

这就是它,谢谢。如果你把它作为答案,我会把它标为一个。 –

回答

2

确保在使用EF6时没有使用System.Data.Entity.dll中的EntityFnctions。 EF5和EF6不是二进制兼容的,理想情况下,如果您使用EF6来避免混淆像这样的错误,则应该删除对System.Data.Entity.dll的引用。在这种特殊情况下,请确保您使用的EntityFunctions来自System.Data.Entity.Core.Objects命名空间,这是EntityFunction类型所在的EF6的地址。