Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Biblioteka Identity Entity Framework — aktualizacja bazy danych [MySQL]

Wiem, że to stary post, ale mam dzisiaj ten sam problem i trochę go zbadałem, i chcę podzielić się moimi odkryciami i rozwiązaniem.

Problem polega na tym, że Microsoft dodał między wersjami unikalny indeks do Name kolumna AspNetRoles , a ponieważ ta kolumna ma rozmiar 256, łamie zasady indeksowania MySql. Ten problem wystąpi również na Name kolumna na AspNetUsers .

Poszedłem więc przeanalizować, jak to naprawić i myślę, że najbardziej poprawnym rozwiązaniem jest zmniejszenie długości Name kolumna (IMHO to naprawdę nie jest żaden powód, aby mieć rolę/użytkownika o tak długiej nazwie).

Po zbadaniu kodu w IdentityDbContext (która jest klasą bazową) uważam, że najbardziej poprawnym rozwiązaniem tego problemu jest nadpisanie OnModelCreating w ApplicationDbContext i dostosuj tam rozmiary kolumn w ten sposób:

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);
    }
}

Ten kod zainicjuje model tożsamości z domyślną konfiguracją z base.OnModelCreating wywołaj, a następnie nadpisz ustawienia wykonane w klasie bazowej naszymi własnymi.

Ponieważ tworzysz projekt migracji, musisz ponownie uruchomić tworzenie migracji, aby uzyskać zaktualizowany model (lub ręcznie zmodyfikować model, aby dostosować rozmiary kolumn).

To rozwiąże problem i będziesz mieć pełną funkcjonalność systemu Asp.NET Identity.

Oczywiście, aby nie uzyskać żadnych błędów podczas tworzenia projektu, możesz po prostu zmodyfikować kod migracji, ale wtedy będziesz mieć różnicę w modelu zdefiniowanym przez kontekst, który nie jest dobry i może powodować problemy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego PDO drukuje moje hasło, gdy połączenie nie powiedzie się?

  2. Wynik echa sumy PHP w locie (trudny)

  3. $wpdb->update lub $wpdb->insert powoduje dodawanie ukośników przed cudzysłowami

  4. Co powinien wiedzieć każdy programista PHP?

  5. jak zapisać wartość wyliczenia do DB z Hibernate?