Zasadniczo mam stół z kodami pocztowymi. Pole kodu pocztowego jest zdefiniowane jako "char (5)". Ja najpierw za pomocą kodu, więc mam umieścić te atrybuty na mojej posesji Kod pocztowy:Dlaczego kod first/EF używa "nvarchar (4000)" dla ciągów w surowym poleceniu SQL?
[Key, Column(Order = 0, TypeName = "nchar"), StringLength(5)]
public string ZipCode { get; set; }
gdybym zapytania przed tym w EF:
var zc = db.ZipCodes.FirstOrDefault(zip => zip.ZipCode == "12345");
Wygenerowany SQL wykorzystuje nvarchar (4000) wstrzykiwać parametry. Huh? Czy to dlatego, że "12345" jest technicznie ciągiem o nieznanej długości? Czy EF nie powinien być na tyle sprytny, aby użyć właściwego "nchar (5)" podczas odpytywania w tabeli?
Pytam, ponieważ zapytanie nvarchar (4000) zajmuje pół sekundy, podczas gdy zapytanie o właściwej odległości jest znacznie szybsze (i mniej czyta).
Każda pomoc/doradztwo byłoby mile widziane.
czy po dodaniu atrybutów do swoich jednostek upuściłeś i ponownie utworzył bazę danych? – BrokenGlass
Jest to wbrew istniejącej bazie danych i nie pozwalam, aby Code First ponownie ją wygenerował. Istniejąca baza danych to zdecydowanie char (5). –