Mysql
 sql >> Database >  >> RDS >> Mysql

Libreria Identity Entity Framework - Aggiorna database [MySQL]

So che questo è un vecchio post, ma oggi ho lo stesso problema e ho indagato un po' su questo, e voglio condividere i miei risultati e la mia soluzione.

Il problema è che Microsoft ha aggiunto tra le versioni un indice univoco al Name colonna di AspNetRoles e poiché questa colonna è di dimensione 256, infrange le regole dell'indice di MySql. Questo problema si verificherà anche sul Name colonna su AspNetUsers .

Quindi, sono andato ad analizzare come risolvere questo problema e penso che la cosa più corretta da fare sia ridurre la lunghezza del Name colonna (IMHO non è davvero un motivo per avere un ruolo/utente con un nome così lungo).

Dopo aver esaminato il codice su IdentityDbContext (che è la classe base) penso che la soluzione più corretta a questo problema sia sovrascrivere OnModelCreating in ApplicationDbContext e regola le dimensioni delle colonne in questo modo:

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

Questo codice inizializzerà il modello di identità con la configurazione predefinita con base.OnModelCreating chiama e poi sovrascrivi le impostazioni fatte nella classe base con le nostre.

Poiché stai creando un progetto di migrazione, dovrai eseguire nuovamente la creazione della migrazione per ottenere il modello aggiornato (o modificare manualmente il modello per regolare le dimensioni delle colonne).

Questo risolverà il problema e avrai la piena funzionalità del sistema Asp.NET Identity.

Ovviamente per non ottenere errori alla creazione del progetto potresti semplicemente modificare il tuo codice di migrazione, ma poi avrai una differenza con il modello definito dal tuo contesto che non è buono e potrebbe causare problemi.