wake-up-neo.net

Wie setze ich eine Spalte in SQL Server mit ASP.net EF Codefirst Data Annotations auf varchar (max)?

Ich habe im Internet gesucht und versucht, die richtige Syntax für Entity Framework Code zu finden. Zuerst muss meine Tabelle mit einer Spalte erstellt werden: varchar (max).

Das ist was ich habe. Standardmäßig wird varchar (128) erstellt. Wie erstelle ich varchar (max)?

Ich habe [MaxLength] ohne Erfolg versucht.

Jede Hilfe wäre dankbar. Vielen Dank!

[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
40
Maddhacker24
[Column(TypeName = "varchar(MAX)")]

Überraschenderweise funktioniert die naheliegendste Lösung.

Das [MaxLength]-Attribut erstellt nur eine varchar-Spalte mit einer maximalen Länge, die nicht MAX ist, in meinem Fall (SQL Server Express 2008 R2) jedoch 8000.

68
Slauma

Dies wird Sie nvarchar(max) bekommen:

[StringLength(int.MaxValue)]

Ich glaube nicht, dass es ein Attribut gibt, das den Nicht-Unicode erzwingt (sind Sie sicher, dass Sie das wollen?). Für varchar(max) benötigen Sie einen Tweak im DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
13
Diego Mijelshon

Verwenden Sie die Annotation [MaxLength].

[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
3
bhuvin

Update für @Slauma-Antwort. 

Verwenden Sie eine Überschreibung für alle Zeichenfolgen wie folgt in OnModelCreating:

modelBuilder.Properties<string>().Configure(s => 
    s.HasMaxLength(256).HasColumnType("nvarchar"));

und dann Eigenschaften mit Attributen wie folgt ändern:

[Column(TypeName = "nvarchar(MAX)")]
public string CaseComment { get; set; }

Oder dieses:

modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)");

Dies kann die Ausnahme verursachen. Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. Auch wenn die Spalte den richtigen Datentyp hat, hält Entity Framework immer noch für nvarchar(256) und gibt den Fehler DbEntityValidationException aus. 

Um dies zu beheben, verwenden Sie stattdessen Folgendes:

[Column(TypeName = "nvarchar(MAX)")]
[MaxLength]
public string CaseComment { get; set; }

Oder

modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)")
    .HasMaxLength(null);
0
Ogglas

[Column(TypeName = "varchar(MAX)")] führt zu varchar (Max) in der Datenbank. Wenn Sie über eine benutzerdefinierte Konvention verfügen, die die Zeichenfolgen MaxLength auf 100 setzt, modelBuilder .Properties<string>() .Configure(c => c.IsUnicode(false).HasMaxLength(100)); Sie müssen das MaxLength-Attribut [Column(TypeName = "varchar(MAX)"), MaxLength] angeben. Wenn Sie dies nicht tun, wird varchar (MAX) in der Datenbank angezeigt, aber die Überprüfung wird für mehr als 100 Zeichen ausgelöst

0
cResults