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

Herança de classe com .NET EF4.1 + MySQL


Eu me deparei com o mesmo problema hoje, a diferença é que não estou confiando no Code First para criar as tabelas para mim, estou criando-as manualmente à medida que vou.

Eu segui a descrição dada aqui e acabei com o mesmo erro que você, criei manualmente um campo "Discriminador" na minha tabela e alterei seu tipo para MEDIUMTEXT, mas o provedor insistiu que eu estava de alguma forma fornecendo uma propriedade MaxLength, mesmo que MEDIUMTEXT não tenha MaxLength como VARCHAR , suponho que isso deve ser um bug no provedor.

Bem, para contornar isso, usei a API fluente para informar manualmente o nome da coluna discriminadora (que apenas mantive como "Discriminador") e os valores que o EF deve esperar da coluna discriminadora, no seu caso seria:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Vehicle>()
            .Map<Car>(m => m.Requires("Discriminator").HasValue("Car"))
            .Map<Bike>(m => m.Requires("Discriminator").HasValue("Bike"));
}

Eu mudei o tipo da minha coluna discriminadora para VARCHAR(50) sem nenhum problema aparente, está funcionando bem para mim agora. A alternativa para mim seria migrar para outro ORM que é muito trabalhoso, vou esperar as próximas versões do provedor MySql e testar se eles corrigiram isso, enquanto isso vou ficar com esta solução.