2013-08-16 8 views
11

Sto giocando con EF 5 e prima il codice. Finora mi piace davvero, ma ho notato che imposta le colonne delle stringhe su nvarchar. Se voglio usare varchar, devo specificarlo esplicitamente.Entity Framework 5 codifica la prima stringa di mappa su varchar a livello globale

posso forzarlo ad utilizzare varchar invece di nvarchar per le stringhe come segue:

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; } 
} 

avrei tipicamente utilizzare varchar invece di nvarchar in quasi tutti i casi, però, così io preferirei di gran lunga avere colonne stringa a livello globale mappato su varchar e per poter impostare nvarchar su una base per colonna come sopra se necessario.

Qualcuno sa un modo per farlo? Sto cercando di omettere la necessità di digitare [Column (TypeName = "varchar")] per ogni colonna di stringhe nel mio modello.

risposta

4

È necessario scrivere come:

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

Per molti informazioni si prega di dare un'occhiata a questo link

+0

Mi rendo conto che può essere scritto in questo modo come per il mio esempio. Sono sicuro che deve essere possibile farlo a livello globale però. –

+0

Hai provato api fluenti per questo ?, perché a volte DataAnnotation non ci dà il miglior risultato –

+0

Ho avuto anche questo problema, e questo ha funzionato per me. Se hai già creato colonne di NVarchar come ho fatto io, questo renderà la prossima migrazione del codice prima di aggiungere il problema (converti le colonne di NVarchar in Varchar). Bravo! –

9

su EF 6 è possibile utilizzare questo per mappare ogni proprietà stringa da utilizzare varchar invece 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

Utilizzare questo se si desidera impostarli tutti su varchar senza verificare gli attributi: 'modelBuilder.Properties () .Configure (c => c.HasColumnType (" varchar "));' –

-1

oppure

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