J'ai cherché sur le Web à essayer de trouver la syntaxe appropriée pour que Code Entity Framework commence par créer ma table avec une colonne: varchar (max).
C'est ce que j'ai. Par défaut, cela crée varchar (128). Comment créer varchar (max)?
J'ai essayé [MaxLength] sans succès.
Toute aide serait appréciée. Merci!
[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
[Column(TypeName = "varchar(MAX)")]
Étonnamment, la solution la plus évidente fonctionne.
L'attribut [MaxLength]
crée uniquement une colonne varchar
avec une longueur maximale autre que MAX mais - dans mon cas (SQL Server Express 2008 R2) - 8000.
Cela vous donnera nvarchar(max)
:
[StringLength(int.MaxValue)]
Je ne pense pas qu'il y ait un attribut pour forcer le non-unicode (êtes-vous sûr de vouloir cela?), Donc pour varchar(max)
vous avez besoin d'un Tweak dans le DbContext:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
Utilisez l'annotation [MaxLength].
[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
Mise à jour pour la réponse @Slauma.
Utiliser un remplacement pour toutes les chaînes comme celle-ci dans OnModelCreating
:
modelBuilder.Properties<string>().Configure(s =>
s.HasMaxLength(256).HasColumnType("nvarchar"));
puis en modifiant les propriétés avec des attributs comme celui-ci:
[Column(TypeName = "nvarchar(MAX)")]
public string CaseComment { get; set; }
Ou ca:
modelBuilder.Entity<YourClass>()
.Property(b => b.CaseComment)
.HasColumnType("nvarchar(MAX)");
Cela peut provoquer l'exception. Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
Même si le type de données de la colonne est correct, Entity Framework pense toujours qu'il s'agit de nvarchar(256)
et renvoie l'erreur DbEntityValidationException
.
Pour résoudre ce problème, utilisez plutôt ce qui suit:
[Column(TypeName = "nvarchar(MAX)")]
[MaxLength]
public string CaseComment { get; set; }
Ou
modelBuilder.Entity<YourClass>()
.Property(b => b.CaseComment)
.HasColumnType("nvarchar(MAX)")
.HasMaxLength(null);
[Column(TypeName = "varchar(MAX)")]
se traduit par varchar (Max) dans la base de données. Si vous avez un paramètre de convention personnalisé, MaxLength vaut 100,
modelBuilder
.Properties<string>()
.Configure(c => c.IsUnicode(false).HasMaxLength(100));
vous devez inclure l'attribut MaxLength [Column(TypeName = "varchar(MAX)"), MaxLength]
. Si vous ne le faites pas, vous obtiendrez varchar (MAX) dans la base de données mais la validation générera plus de 100 caractères.