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.