Ik weet dat dit een oud bericht is, maar ik heb vandaag hetzelfde probleem gehad en heb hier een beetje onderzoek naar gedaan, en wil mijn bevindingen en oplossing delen.
Het probleem is dat Microsoft tussen de versies een unieke index heeft toegevoegd aan de Name
kolom van AspNetRoles
, en aangezien deze kolom de grootte 256 heeft, breekt hij de indexregels van MySql. Dit probleem zal ook optreden op de Name
kolom op AspNetUsers
.
Dus ging ik analyseren hoe ik dit kon oplossen, en ik denk dat het het meest correct is om de lengte van de Name
te verminderen column (IMHO is het echt geen reden om een rol/gebruiker met zo'n lange naam te hebben).
Na het onderzoeken van de code op de IdentityDbContext (wat de basisklasse is) denk ik dat de meest correcte oplossing voor dit probleem is om de OnModelCreating
te negeren in ApplicationDbContext
en pas daar de kolomgroottes als volgt aan:
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);
}
}
Deze code initialiseert het identiteitsmodel met standaardconfiguratie met de base.OnModelCreating
aanroepen en vervolgens de instellingen die in de basisklasse zijn gedaan overschrijven met die van ons.
Aangezien u een migratieproject aan het maken bent, moet u het maken van de migratie opnieuw uitvoeren om het bijgewerkte model te krijgen (of uw model handmatig wijzigen om de kolomgroottes aan te passen).
Dit lost het probleem op en u beschikt over de volledige functionaliteit van het Asp.NET Identity-systeem.
Om geen fouten te krijgen bij het maken van het project, kunt u natuurlijk gewoon uw migratiecode wijzigen, maar dan zult u een verschil hebben met het model gedefinieerd door uw context, wat niet goed is en problemen kan veroorzaken.