2013-03-12 4 views
7

Ich habe eine Tabelle mit einer Spalte varchar und ich Entity Framework verwende diese Spalte in der WHERE Klausel zu verwenden.Wie behandelt man Varchar-Spalten mit Entity Framework?

Entity Framework generiert die Abfrage mit N'' daher auch der Index für die Spalte nicht verwendet werden kann. Gibt es eine Möglichkeit Entity Framework zu zwingen varchar Abfrage statt nvarchar ein zu generieren?

Antwort

6

Es hängt davon ab, wie Sie Ihr EF-Modell erstellt haben. Wenn Sie den Designer verwenden, können Sie den gewünschten Datentyp für jede Spalte angeben (in Ihrem Fall einfach varchar und fertig).

Wenn Sie einen Code-First-Ansatz verwenden Sie haben die Eigenschaft, dekorieren, die diese Spalte mit dem richtigen Attribut darstellt (string Objekte in .NET sind Unicode immer so ist es nvarchar von Standardkarte werden), nur dieses allein tun (mit Daten Anmerkungen, wenn Sie mit StringAttribute dann se seine IsUnicode Eigenschaft false):

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

Im EDMX habe ich richtig Typen (char) und die Länge (6) für die Spalte. Ich habe auch zusätzliche Metadatenklasse und dekorierte die Eigenschaft mit der Spalte (Type-Name = „char“)] und StringLength Attribute. Aber ich sehe den seltsamen Code, der SELECT TOP (2) und varchar (8000) für den Parameter ausführt. Wie man es repariert? – Naomi

+0

@Naomi nicht genug Details, um das zu beantworten. Stellen Sie es als eine neue Frage und vergessen Sie nicht relevanten Teil in der Klassendeklaration enthalten und Code, den Sie ausführen, um solche SQL zu produzieren! –

+0

Vielleicht werde ich morgen eine neue Frage hinzufügen. Ich habe diese Frage tatsächlich bereits in MSDN http://social.msdn.microsoft.com/Forums/vstudio/en-US/696f5fd6-d10f-40d3-82d2-feea806965cc/two-same-classes-how-to-add- gestellt. Attribute-zur-Eigenschaft? Forum = csharpgeneral – Naomi

5

können Sie die EntityFunctions.AsNonUnicode verwenden (string) -Methode, so wird die EF Pass nicht den String-Wert als nvarchar. Ich hatte das gleiche Problem mit EF 5 und EDMX, in dem die Oracle-Datenbank wurde eine varchar2 Spaltenindex ignoriert, und das ist für mich gearbeitet.

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

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

Verwandte Themen