Mysql
 sql >> база данни >  >> RDS >> Mysql

Identity Entity Framework Library – Актуализиране на база данни [MySQL]

Знам, че това е стара публикация, но днес получих същия проблем и проучих малко около това и искам да споделя своите констатации и решение.

Проблемът е, че 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.

Разбира се, за да не получите никакви грешки при създаването на проекта, можете просто да промените кода си за миграция, но тогава ще имате разлика с модела, дефиниран от вашия контекст, което не е добро и може да причини проблеми.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Няма избрана база данни - PHP и MySQL

  2. извличане на данни от таблицата с една заявка

  3. Актуализирайте всички стойности на колона до малки букви

  4. MySQL математически функции (пълен списък)

  5. Вмъкване на множество стойности на масива в базата данни на mySQL