2013-03-12 14 views
7

Mam tabela z kolumną varchar i używam Entity Framework do korzystania z tej kolumny w klauzuli WHERE.Jak obsługiwać kolumny varchar z Entity Framework?

Entity Framework generuje zapytanie z N'', więc nie można użyć indeksu w kolumnie. Czy istnieje sposób zmusić Entity Framework do generowania zapytania varchar zamiast nvarchar?

Odpowiedz

6

To zależy od sposobu, w jaki zbudowałeś model EF, jeśli używasz jego Projektanta, możesz określić wymagany typ danych dla każdej kolumny (w twoim przypadku wystarczy ustawić varchar i gotowe).

Jeśli używasz podejścia opartego na pierwszym kodzie, musisz udekorować właściwość, która reprezentuje tę kolumnę z odpowiednim atrybutem (obiekty string w .NET są zawsze w kodzie Unicode, więc domyślnie mapuje się nvarchar), po prostu zrób to (z adnotacji danych, jeśli używasz StringAttribute potem se swoją IsUnicode właściwość false):

[Column(TypeName = "varchar")] 
public string YourColumnName 
{ 
    get; 
    set; 
} 
+0

W EDMX I prawidłowo ustawić typ (cząstki węgla), i długość (6) przez kolumnę. Dodałem także dodatkową klasę metadanych i udekorowałem ją atrybutami Column (TypeName = "char")] i StringLength. Jednak widzę dziwny kod wykonujący SELECT TOP (2) i varchar (8000) dla parametru. Jak to naprawić? – Naomi

+0

@Naomi nie ma wystarczających informacji, aby na to odpowiedzieć. Napisz to jako nowe pytanie i nie zapomnij o włączeniu odpowiedniej części do deklaracji klasy i kodu, który wykonujesz, aby stworzyć taki kod SQL! –

+0

Może będę Dodałem nowe pytanie jutro. Właściwie to już zadałem to pytanie w MSDN http://social.msdn.microsoft.com/Forums/vstudio/en-US/696f5fd6-d10f-40d3-82d2-feea806965cc/two-same-classes-how-to-add- atrybuty do właściwości? forum = csharpgeneral – Naomi

5

można użyć metody EntityFunctions.AsNonUnicode (string), więc to nie będzie przechodzić EF wartość ciągu jako nvarchar. Miałem ten sam problem z EF 5 i EDMX, gdzie baza danych Oracle ignorowała indeks kolumny varchar2 i to działało dla mnie.

var q = (from TableClass t in TableName 
     where t.varchar2Column == EntityFunctions.AsNonUnicode(someText)); 

MSDN odniesienia: https://msdn.microsoft.com/pt-br/library/system.data.objects.entityfunctions(v=vs.110).aspx

Powiązane problemy