Jeg ved, at dette er et gammelt indlæg, men jeg fik det samme problem i dag og undersøgte lidt omkring dette, og jeg vil gerne dele mine resultater og løsning.
Problemet er, at Microsoft mellem versionerne har tilføjet et unikt indeks til Name
kolonne af AspNetRoles
, og da denne kolonne er af størrelse 256, bryder den indeksreglerne for MySql. Dette problem vil også opstå på Name
kolonne på AspNetUsers
.
Så jeg gik for at analysere, hvordan man fikser dette, og jeg tror, at det mest korrekte at gøre er at reducere længden af Name
kolonne (IMHO det er virkelig ikke nogen grund til at have en rolle/bruger med et så langt navn).
Efter at have undersøgt koden på IdentityDbContext (som er basisklassen) tror jeg, at den mest korrekte løsning på dette problem er at tilsidesætte OnModelCreating
i ApplicationDbContext
og juster kolonnestørrelserne der sådan her:
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);
}
}
Denne kode vil initialisere identitetsmodellen med standardkonfiguration med base.OnModelCreating
opkald og tilsidesæt derefter indstillingerne i basisklassen med vores egne.
Da du opretter et migreringsprojekt, bliver du nødt til at køre migreringsoprettelsen igen for at få den opdaterede model (eller manuelt ændre din model for at justere kolonnestørrelserne).
Dette vil løse problemet, og du vil have fuld funktionalitet af Asp.NET Identity-systemet.
For ikke at få nogen fejl ved oprettelsen af projektet kan du selvfølgelig bare ændre din migreringskode, men så vil du have en forskel med modellen defineret af din kontekst, som ikke er god og kan forårsage problemer.