Знам, че това е стара публикация, но днес получих същия проблем и проучих малко около това и искам да споделя своите констатации и решение.
Проблемът е, че Microsoft между версиите добави уникален индекс към Name
колона на AspNetRoles
, и тъй като тази колона е с размер 256, тя нарушава индексните правила на MySql. Този проблем ще възникне и при Name
колона на AspNetUsers
.
И така, отидох да анализирам как да поправя това и мисля, че най-правилното е да се намали дължината на Name
колона (IMHO наистина не е причина да имате роля/потребител с толкова дълго име).
След като проучих кода на IdentityDbContext (който е основният клас) мисля, че най-правилното решение на този проблем е да се отмени OnModelCreating
в ApplicationDbContext
и коригирайте размерите на колоните по следния начин:
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);
}
}
Този код ще инициализира модела на идентичност с конфигурация по подразбиране с base.OnModelCreating
извикайте и след това заменете настройките, направени в основния клас, с нашите собствени.
Тъй като създавате проект за миграция, ще трябва да стартирате отново създаването на миграция, за да получите актуализирания модел (или ръчно да промените модела си, за да коригирате размерите на колоните).
Това ще реши проблема и ще имате пълната функционалност на системата Asp.NET Identity.
Разбира се, за да не получите никакви грешки при създаването на проекта, можете просто да промените кода си за миграция, но тогава ще имате разлика с модела, дефиниран от вашия контекст, което не е добро и може да причини проблеми.