Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Additional information: Invalid column name 'Discriminator'

Criei as duas classes PessoaFisica e PessoaJuridica que herdam de Usuario. Atualizei o banco através do consele: add-migration e atualizou as tabelas no banco.

Mas no meu programa, eu tenho um código que pega todas as vendas:

var TodasVendas = context.Vendas.Include(u => u.Cliente).Include(vp => vp.VendaProduto).ThenInclude(v => v.Produto).ToList();

Aí quando ele executa aparece o seguinte erro:

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.Core.dll

Additional information: Invalid column name 'Discriminator'.

Invalid column name 'Discriminator'.

Quando faço o include do cliente na chamada: no banco existe a coluna "Discriminator" mas na minha entidade não.

Como resolvo da melhor forma este problema?

Obrigado.

3 respostas

Estava verificando o meu código, e eu tinha alterado o nome da coluna "Discriminator" no momento da criação das tabelas no EF para "PFPJ", por isso o erro mencionado.

Abri um script.sql e executei o seguinto código (para voltar atrás): SP_RENAME 'usuario.PFPJ', 'Discriminator' , 'COLUMN';

O programa rodou sem problemas, mas ai a dúvida, como faço para alterar o nome da coluna "Discriminator" para PFPJ? é possível?

Oi Tiago,

É só você fazer uma migração e onde tem AddColumn e DropColumn você alterar para RenameColumn.

RenameColumn("tabela", "nome_antigo", "nome_novo");

Abraço!

solução!

Olá,

Dessa forma não funcionou, pois a coluna utilizava "Table-Per-Hierarchy (TPH) Inheritance"

Então dei mais uma pesquisada e alterei o método OnModelCreating incluíndo:

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Usuario>().HasDiscriminator<string>("PFPJ")
              .HasValue<PessoaFisica>("PF")
              .HasValue<PessoaJuridica>("PJ");

            modelBuilder.Entity<VendaProduto>().HasKey(vp => new { vp.VendaID, vp.ProdutoID });
            base.OnModelCreating(modelBuilder);

        }

Assim a chamada:

modelBuilder.Entity<Usuario>().HasDiscriminator<string>("PFPJ")
              .HasValue<PessoaFisica>("PF")
              .HasValue<PessoaJuridica>("PJ");

Criou uma coluna PFPJ para ser o "Discriminator" com os valores PF quando fosse gavado um registro pela classe Pessoa Física e PJ quando fosse gravado um registro pela classe Pessoa Jurídica.

Obrigado!