sql >> Base de Datos >  >> RDS >> Mysql

Biblioteca de Identity Entity Framework - Actualizar base de datos [MySQL]

Sé que esta es una publicación anterior, pero hoy tuve el mismo problema e investigué un poco sobre esto, y quiero compartir mis hallazgos y la solución.

El problema es que Microsoft entre las versiones agregó un índice único al Name columna de AspNetRoles , y dado que esta columna tiene un tamaño de 256, rompe las reglas de índice de MySql. Este problema también ocurrirá en el Name columna en AspNetUsers .

Entonces, me puse a analizar cómo solucionar esto, y creo que lo más correcto es reducir la longitud del Name columna (en mi humilde opinión, realmente no es ninguna razón para tener un rol/usuario con un nombre tan largo).

Después de investigar el código en IdentityDbContext (que es la clase base), creo que la solución más correcta a este problema es anular OnModelCreating en ApplicationDbContext y ajuste los tamaños de las columnas de esta manera:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    //... default code for ApplicationDbContext

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        if (modelBuilder == null)
        {
            throw new ArgumentNullException("modelBuilder");
        }

        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ApplicationUser>().Property(u => u.UserName).HasMaxLength(128);

        //Uncomment this to have Email length 128 too (not neccessary)
        //modelBuilder.Entity<ApplicationUser>().Property(u => u.Email).HasMaxLength(128);

        modelBuilder.Entity<IdentityRole>().Property(r => r.Name).HasMaxLength(128);
    }
}

Este código inicializará el modelo de identidad con la configuración predeterminada con base.OnModelCreating llame y luego anule la configuración realizada en la clase base con la nuestra.

Dado que está creando un proyecto de migración, deberá volver a ejecutar la creación de la migración para obtener el modelo actualizado (o modificar manualmente su modelo para ajustar los tamaños de las columnas).

Esto resolverá el problema y tendrá la funcionalidad completa del sistema de identidad Asp.NET.

Por supuesto, para no obtener ningún error en la creación del proyecto, simplemente puede modificar su código de migración, pero luego tendrá una diferencia con el modelo definido por su contexto que no es bueno y podría causar problemas.