sql >> Databasteknik >  >> RDS >> Mysql

Identity Entity Framework Library - Uppdatera databas [MySQL]

Jag vet att detta är ett gammalt inlägg, men jag fick samma problem idag och undersökte lite kring detta och vill dela med mig av mina upptäckter och lösning.

Problemet är att Microsoft har mellan versionerna lagt till ett unikt index till Name kolumn för AspNetRoles , och eftersom denna kolumn är av storlek 256 bryter den mot indexreglerna för MySql. Det här problemet kommer också att uppstå på Name kolumn på AspNetUsers .

Så jag gick för att analysera hur man fixar detta, och jag tror att det mest korrekta att göra är att minska längden på Name kolumn (IMHO det är verkligen ingen anledning att ha en roll/användare med ett så långt namn).

Efter att ha undersökt koden på IdentityDbContext (som är basklassen) tror jag att den mest korrekta lösningen på detta problem är att åsidosätta OnModelCreating i ApplicationDbContext och justera kolumnstorlekarna där så här:

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

Denna kod kommer att initiera identitetsmodellen med standardkonfiguration med base.OnModelCreating ring och åsidosätt sedan inställningarna som gjorts i basklassen med vår egen.

Eftersom du skapar ett migreringsprojekt måste du köra om migreringsskapandet för att få den uppdaterade modellen (eller ändra din modell manuellt för att justera kolumnstorlekarna).

Detta kommer att lösa problemet och du kommer att ha full funktionalitet av Asp.NET Identity-systemet.

Naturligtvis för att inte få några fel när projektet skapades kan du bara ändra din migreringskod, men då kommer du att ha en skillnad med modellen som definieras av ditt sammanhang, vilket inte är bra och kan orsaka problem.



  1. Erlang emysql iPhone Emoji-kodningsproblem

  2. Hur genererar man en dynamisk sekvenstabell i MySQL?

  3. php infoga flera rader i MYSQL-databasen

  4. Python3 + MySql:Fel vid laddning av MySQLdb-modul:Ingen modul med namnet 'MySQLdb'