tutorial que framework first existing español ejemplo code c# sql-server entity-framework ef-code-first

c# - que - ¿Cómo configuro una columna en SQL Server para varchar(max) usando ASP.net EF Codefirst Annotations?



entity framework model first (5)

He estado buscando en la web tratando de encontrar la sintaxis correcta para tener el código del Entity Framework. Primero creo mi tabla con una columna: varchar (max).

Esto es lo que tengo. Por defecto esto crea varchar (128). ¿Cómo creo varchar (max)?

Lo intenté [MaxLength] sin éxito.

Cualquier ayuda sería apreciada. ¡Gracias!

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


Actualización para @Slauma respuesta.

Usar una sustitución para todas las cadenas como esta en OnModelCreating :

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

y luego modificando propiedades con atributos como este:

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

O esto:

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

Esto puede causar la excepción. Validation failed for one or more entities. See ''EntityValidationErrors'' property for more details. Aunque la columna es del tipo de datos correcto, Entity Framework aún piensa que es nvarchar(256) y arroja el error DbEntityValidationException .

Para solucionar este problema, utiliza lo siguiente:

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

O

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


Esto te dará nvarchar(max) :

[StringLength(int.MaxValue)]

No creo que haya un atributo para forzar no unicode (¿estás seguro de que quieres eso?), Por lo que para varchar(max) necesitas un ajuste en el DbContext:

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


Use la anotación [MaxLength].

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


[Column(TypeName = "varchar(MAX)")] da como resultado varchar (Max) en la base de datos. Si tiene una configuración de convención personalizada, cadenas de MaxLength a 100, modelBuilder .Properties<string>() .Configure(c => c.IsUnicode(false).HasMaxLength(100)); necesita incluir el atributo MaxLength [Column(TypeName = "varchar(MAX)"), MaxLength] . Si no lo hace, obtendrá varchar (MAX) en la base de datos, pero la validación arrojará para más de 100 caracteres


[Column(TypeName = "varchar(MAX)")]

Sorprendentemente, la solución más obvia funciona.

El atributo [MaxLength] solo crea una columna varchar con una longitud máxima que no es MAX pero, en mi caso (SQL Server Express 2008 R2) - 8000.