2013-12-15 109 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的地址。