2013-08-16 7 views
11

Ich spiele mit EF 5 und Code zuerst. Bis jetzt mag ich es wirklich, aber ich habe bemerkt, dass es die String-Spalten auf nvarchar setzt. Wenn ich varchar verwenden möchte, muss ich es explizit angeben.Entity Framework 5 Code erste Zuordnung Zeichenfolge zu varchar global

Ich kann es erzwingen varchar statt nvarchar für Strings wie folgt zu verwenden:

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

ich in der Regel varchar statt nvarchar verwenden würden, obwohl in fast allen Fällen, also würde ich viel String-Spalten bevorzugen global haben auf varchar gemappt, und nvarchar pro Spalte wie oben festgelegt werden, wenn ich muss.

Kennt jemand einen Weg, dies zu tun? Ich versuche, die Angabe von [Column (TypeName = "varchar")] für jede Stringspalte in meinem Modell wegzulassen.

Antwort

4

Sie müssen es als schreiben:

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

Für viele Informationen schauen Sie bitte in diesem link

+0

Ich weiß, dass es so geschrieben werden kann wie in meinem Beispiel. Ich bin mir sicher, dass es global möglich sein muss. –

+0

Haben Sie versucht, fließend api für diese?, Weil manchmal DataAnnotation gibt uns nicht das beste Ergebnis –

+0

Ich hatte dieses Problem auch, und das hat für mich funktioniert. Wenn Sie NVarchar-Spalten wie ich bereits erstellt haben, wird die nächste Code-First-Migration, die Sie hinzufügen, das Problem beheben (konvertieren Sie die NVarchar-Spalten in Varchar). Bravo! –

9

auf EF 6 Sie diese verwenden können jede String-Eigenschaft abzubilden varchar zu verwenden, anstatt 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

Verwenden Sie dies, wenn Sie alle auf Varchar setzen möchten, ohne nach Attributen zu suchen: 'modelBuilder.Properties () .Configure (c => c.HasColumnType (" varchar "));' –

-1

Oder

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