2013-08-16 6 views
11

Gram z EF 5 i kod pierwszy. Do tej pory bardzo mi się podoba, ale zauważyłem, że domyślnie kolumny ciągów do nvarchar. Jeśli chcę używać varchar, to muszę to wyraźnie powiedzieć.Entity Framework 5 kodu pierwszy ciąg znaków do varchar globalnie

mogę zmusić go do używania varchar zamiast nvarchar ciągów następująco:

public class Member 
{ 
    public int id { get; set; } 

    [MaxLength(255), Required, Column(TypeName = "varchar")] 
    public string firstName { get; set; } 

    [MaxLength(255), Required, Column(TypeName = "varchar")] 
    public string surname { get; set; } 
} 

bym zazwyczaj korzystają varchar zamiast nvarchar w prawie wszystkich przypadkach, choć, więc wolę mieć kolumny ciągów globalnie zmapowany do varchar, i aby móc ustawić nvarchar na podstawie kolumny jak wyżej, jeśli potrzebuję.

Czy ktoś wie, jak to zrobić? Próbuję pominąć potrzebę pisania [Kolumna (TypeName = "varchar")] dla każdej kolumny ciągów w moim modelu.

Odpowiedz

4

Musisz napisać go jako:

[Column(TypeName = "VARCHAR")] 
public string firstName { get; set; } 

Dla wielu informacji proszę spojrzeć na ten link

+0

Zdaję sobie sprawę, że można to napisać tak jak na moim przykładzie. Jestem pewien, że musi to być możliwe na całym świecie. –

+0

Czy próbowałeś w tym celu płynnego API ?, ponieważ czasami DataAnnotation nie daje nam najlepszego wyniku. –

+0

Miałem też ten problem i to działało dla mnie. Jeśli już stworzyłeś kolumny NVarchar tak jak ja, spowoduje to, że następna migracja z Code First, którą dodasz, naprawi problem (przekształć kolumny NVarchar w Varchar). Brawo! –

9

na EF 6 można to wykorzystać do mapowania wszelkich właściwości String używać varchar zamiast nvarchar

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Properties() 
      .Where(x => 
       x.PropertyType.FullName.Equals("System.String") && 
       !x.GetCustomAttributes(false).OfType<ColumnAttribute>().Where(q => q.TypeName != null && q.TypeName.Equals("varchar", StringComparison.InvariantCultureIgnoreCase)).Any()) 
      .Configure(c => 
       c.HasColumnType("varchar")); 
    } 
+1

Użyj tego, jeśli chcesz ustawić je wszystkie na varchar bez sprawdzania atrybutów: 'modelBuilder.Properties () .konfiguruj (c => c.HasColumnType (" varchar "));' –

-1

Lub

modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false));