sql >> Databáze >  >> RDS >> Mysql

Knihovna Identity Entity Framework – aktualizace databáze [MySQL]

Vím, že je to starý příspěvek, ale dnes jsem měl stejný problém a trochu jsem to prozkoumal a chci se podělit o svá zjištění a řešení.

Problém je v tom, že Microsoft mezi verzemi přidal jedinečný index do Name sloupec AspNetRoles a protože tento sloupec má velikost 256, porušuje pravidla indexu MySql. K tomuto problému dojde také u Name ve sloupci AspNetUsers .

Šel jsem tedy analyzovat, jak to opravit, a myslím, že nejsprávnější je zkrátit délku Name (IMHO opravdu není důvod mít roli/uživatele s tak dlouhým jménem).

Po prozkoumání kódu na IdentityDbContext (což je základní třída) si myslím, že nejsprávnějším řešením tohoto problému je přepsat OnModelCreating v ApplicationDbContext a upravte tam velikosti sloupců takto:

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

Tento kód inicializuje model identity s výchozí konfigurací s base.OnModelCreating volání a poté přepište nastavení provedená v základní třídě naším vlastním.

Protože vytváříte projekt migrace, budete muset znovu spustit vytváření migrace, abyste získali aktualizovaný model (nebo ručně upravit svůj model, abyste upravili velikosti sloupců).

Tím se problém vyřeší a budete mít plnou funkčnost systému Asp.NET Identity.

Samozřejmě, aby se při vytváření projektu neobjevily žádné chyby, můžete jednoduše upravit svůj migrační kód, ale pak budete mít rozdíl oproti modelu definovanému vaším kontextem, což není dobré a mohlo by způsobit problémy.



  1. mysql_fetch_array nenačte všechny řádky

  2. Řadit dotaz SQL a resetovat ID a začít v číselném pořadí pokaždé, když vytvořím dotaz nebo seřadím podle značky <th>

  3. Použijte PARSENAME() k vrácení části názvu objektu v SQL Server

  4. KDE VŠE NENÍ NULL