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

Listas com Herança (Dúvida)

Pessoal, eu tenho um projeto e estou com a seguinte dúvida.

Tenho uma classe pai que se chama cliente.

public abstract class Cliente
{
    public int ID { get; set; }
    public string Nome { get; set; }
}

Tenho duas classes que herdam de Cliente, uma com nome de PessoFisica com CPF e outra PessoaJuridica com CNPJ.

A questão é, como puxo uma lista do banco de dados para exibir numa tabela nessa sequencia:

ID/Nome / CPFeCNPJ

Se eu colocar numa Lista de Clientes conforme DAO abaixo eu não consigo puxar as particularidades (CPF ou CNPJ).

Segue minha Classo DAO:

public IList<Cliente> ListarClientes()
{
    lista = from cliente in contexto.Clientes
                        orderby cliente.Nome
                        select cliente;

            return lista.ToList();
}

Obs.: Estou usando o Framework Entity

6 respostas

como isso esta no banco ? o cpf e o cnpj são tabelas separadas ? se sim você pode poderia carregar os relacionamentos delas dando o Include

contexto.Clientes
.Include("CPF ")
.Include("CNPJ").toList()
solução!

Alan, Todas as informações está na mesma tabela em campos separados com um Discriminator informando quem é PessoaJuridica e quem é PessoaFisica.

A questão é que na minha tela de visualização eu tenho um campo só para mostrar CPF ou CNPJ.

Vou ter que colocar um IF no laço de repetição para verificar se tem CPF ou CNPJ??

public IList<Cliente> ListarClientes()
{
    var lista = from cliente in contexto.Clientes
                orderby cliente.Nome
                select cliente;

    return lista.ToList();
}

Minha DAO devolve uma lista de Cliente, como eu puxo CPF e/ou CNPJ nessa lista entende??

Obs.: Coloquei como "Solucionado" sem querer...

A solução seria ter um if no seu template ou você ter duas queries uma que pegase so quem tem cpf e outra para cnpj. Como tudo esta em uma unica tabela você perde a questão do relacionamento, se você tivesse o relacionamento de uma tabela pessoa com pessoa física e pessoa jurídica você conseguiria acessar os dados via relacionamento e você teria uma separação melhor já que em cada tabela você teria uma informação unica apontada para um usuario especifico

Entendi.

Eu fiz a criação das tabelas do Banco de Dados via Entity(Migration), ele não resolve isso pra mim?

Da classe PAI (Cliente) não é uma boa prática eu acessar o atributo CPF ou CNPJ da classe filha ?

Ele não criou tabelas separadas porque sua class pai herda de entity model e as duas class filhas são "um complemento de cliente" por isso ele colocou o atributo delas na mesma tabela, porem se você estivesse usando um relacionamento one to one ele criaria uma tabela para cada uma das class filhas e ela deixariam de herdar de cliente e o único relacionamento que teriam seria da foreign key