Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Biblioteca do Identity Entity Framework - Atualizar banco de dados [MySQL]


Eu sei que este é um post antigo, mas recebi o mesmo problema hoje e investiguei um pouco sobre isso e quero compartilhar minhas descobertas e soluções.

O problema é que a Microsoft entre as versões adicionou um índice exclusivo ao Name coluna de AspNetRoles , e como essa coluna tem tamanho 256, ela quebra as regras de índice do MySql. Este problema também ocorrerá no Name coluna em AspNetUsers .

Então, fui analisar como corrigir isso, e acho que o mais correto a fazer é reduzir o comprimento do Name coluna (IMHO não é realmente nenhum motivo para ter uma função/usuário com um nome tão longo).

Depois de investigar o código no IdentityDbContext (que é a classe base) acho que a solução mais correta para esse problema é substituir o OnModelCreating em ApplicationDbContext e ajuste os tamanhos das colunas assim:
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);
    }
}

Este código irá inicializar o modelo de identidade com configuração padrão com o base.OnModelCreating call e, em seguida, substitua as configurações feitas na classe base pelas nossas.

Como você está criando um projeto de migração, precisará executar novamente a criação da migração para obter o modelo atualizado (ou modificar manualmente seu modelo para ajustar os tamanhos das colunas).

Isso resolverá o problema e você terá a funcionalidade completa do sistema Asp.NET Identity.

Claro que para não ter erros na criação do projeto você poderia apenas modificar seu código de migração, mas aí você terá uma diferença com o modelo definido pelo seu contexto que não é bom e pode causar problemas.