Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Identity Entity Framework Library – Datenbank aktualisieren [MySQL]

Ich weiß, dass dies ein alter Beitrag ist, aber ich habe heute das gleiche Problem und habe ein wenig nachgeforscht und möchte meine Ergebnisse und Lösung teilen.

Das Problem ist, dass Microsoft zwischen den Versionen einen eindeutigen Index zum Name hinzugefügt hat Spalte von AspNetRoles , und da diese Spalte eine Größe von 256 hat, verstößt sie gegen die Indexregeln von MySql. Dieses Problem tritt auch bei Name auf Spalte auf AspNetUsers .

Also habe ich analysiert, wie man das beheben kann, und ich denke, dass es am besten ist, die Länge des Name zu reduzieren Spalte (IMHO ist es wirklich kein Grund, eine Rolle / einen Benutzer mit einem so langen Namen zu haben).

Nachdem ich den Code für IdentityDbContext (die Basisklasse) untersucht habe, denke ich, dass die korrekteste Lösung für dieses Problem darin besteht, OnModelCreating zu überschreiben in ApplicationDbContext und passen Sie dort die Spaltengrößen so an:

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

Dieser Code initialisiert das Identitätsmodell mit der Standardkonfiguration mit base.OnModelCreating aufrufen und dann die in der Basisklasse vorgenommenen Einstellungen mit unseren eigenen überschreiben.

Da Sie ein Migrationsprojekt erstellen, müssen Sie die Migrationserstellung erneut ausführen, um das aktualisierte Modell zu erhalten (oder Ihr Modell manuell ändern, um die Spaltengrößen anzupassen).

Dadurch wird das Problem gelöst und Sie haben die volle Funktionalität des Asp.NET Identity-Systems.

Um bei der Erstellung des Projekts keine Fehler zu erhalten, könnten Sie natürlich Ihren Migrationscode ändern, aber dann haben Sie einen Unterschied zu dem durch Ihren Kontext definierten Modell, was nicht gut ist und Probleme verursachen könnte.