Mysql
 sql >> Base de données >  >> RDS >> Mysql

Bibliothèque Identity Entity Framework - Mettre à jour la base de données [MySQL]

Je sais qu'il s'agit d'un ancien message, mais j'ai eu le même problème aujourd'hui et j'ai enquêté un peu autour de cela, et je souhaite partager mes découvertes et ma solution.

Le problème est que Microsoft a ajouté entre les versions un index unique au Name colonne de AspNetRoles , et comme cette colonne a une taille de 256, elle enfreint les règles d'indexation de MySql. Ce problème se produira également sur le Name colonne sur AspNetUsers .

Donc, je suis allé analyser comment résoudre ce problème, et je pense que le plus correct à faire est de réduire la longueur du Name colonne (IMHO, ce n'est vraiment pas une raison pour avoir un rôle/utilisateur avec un nom aussi long).

Après avoir étudié le code sur IdentityDbContext (qui est la classe de base), je pense que la solution la plus correcte à ce problème est de remplacer le OnModelCreating dans ApplicationDbContext et ajustez la taille des colonnes comme ceci :

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

Ce code initialisera le modèle d'identité avec la configuration par défaut avec le base.OnModelCreating appeler, puis remplacer les paramètres définis dans la classe de base par les nôtres.

Puisque vous créez un projet de migration, vous devrez relancer la création de la migration pour obtenir le modèle mis à jour (ou modifier manuellement votre modèle pour ajuster les tailles de colonne).

Cela résoudra le problème et vous disposerez de toutes les fonctionnalités du système d'identité Asp.NET.

Bien sûr pour ne pas avoir d'erreurs à la création du projet vous pourriez juste modifier votre code de migration, mais alors vous aurez une différence avec le modèle défini par votre contexte qui n'est pas bon et pourrait poser problème.