Usuário com melhor resposta
Modelo Pessoa Cliente, Fornecedor e Colaborador

Pergunta
-
Olá bom dia Pessoal.
Utilizo AspNetCore 2 - EF e Migrations
Criei as seguintes entidades:
public class Cliente { public int ClienteId { get; set; } public decimal LimiteCredito { get; set; } ... public virtual Pessoa Pessoa { get; set; } } public class Fornecedor { public int FornecedorId { get; set; } public string WebSite { get; set; } public string ContaBancaria { get; set; } ... public virtual Pessoa Pessoa { get; set; } } public class Colaborador { public int ColaboradorId { get; set; } public date Admissao { get; set; } public decimal Salario {get; set; } ... public virtual Pessoa Pessoa { get; set; } } public class Pessoa { public int PessoaId { get; set; } public string CpfCnpj { get; set; } public string Nome { get; set; } public List<Endereco> Enderecos {get; set; } public List<Telefone> Telefones{ get; set; } ... }
É possível criar uma Controller e uma View para representar Pessoas e que tenha como usuario escolher...
...se será um Cliente E/ou Fornecedor E/ou Colaborador? Se sim, qual seria a logica para mostrar os dados da Controller na view? não consegui fazer!
ou seria recomendado fazer uma Controller e uma View para cada uma das entidades?
O que eu queria evitar é a duplicação de código semelhante... pois ainda pode ter outros tipos de Pessoas como Transportadores e Contatos...
obrigado quem puder ajudar!
- Editado DevMaicon segunda-feira, 9 de abril de 2018 12:52 Utilizo AspNetCore2
Respostas
-
Bom minha solução foi inserir a propriedade:
public int PessoaId { get; set; }
Nas classes Cliente, Fornecedor e Colaborador.
E na Classe Pessoa:
public Cliente Cliente { get; set; } public Fornecedor Fornecedor { get; set; } public Colaborador Colaborador { get; set; }
Dessa forma funcionou perfeitamente.
Na minha classe PessoaController busco todas as pessoas do tipo que eu tiver selecionado:
pessoa = _context.Pessoas.Include(x => x.Cliente).Where(x => x.TipoPessoa == tipo);
Envio para View uma ViewBag.Tipo e mostro a View conforme o tipo:
// CAMPOS GERAL DE PESSOAS // NOME // TELEFONES // ENDERECOS @if (ViewBag.Tipo == TipoPessoa.Clientes) { //CAMPOS APENAS DO CLIENTE } @if (ViewBag.Tipo == TipoPessoa.Fornecedor) { //CAMPOS APENAS DO FORNECEDOR }
Dessa forma, basicamente vou ter apenas uma Controller, uma Model e uma View para representar pessoas do tipo que quiser (Clientes, Fornecedores, Colaboradores, Usuarios, Transportadores, Contatos...etc)
Deu trabalho, mas valeu apenas.
- Marcado como Resposta DevMaicon terça-feira, 10 de abril de 2018 19:51
Todas as Respostas
-
-
Michaeell,
Acredito que se você usa HERANÇA vi te ajudar muito.
====================================================Modelando classe PESSOA e CLIENTES com herança
https://social.msdn.microsoft.com/Forums/pt-BR/55ebb5ca-3e36-44a2-abcd-86f41fbc070d/modelando-classe-pessoa-e-clientes-com-herana?forum=adoptpt
====================================================[]'s,
Fabio I. -
Bom minha solução foi inserir a propriedade:
public int PessoaId { get; set; }
Nas classes Cliente, Fornecedor e Colaborador.
E na Classe Pessoa:
public Cliente Cliente { get; set; } public Fornecedor Fornecedor { get; set; } public Colaborador Colaborador { get; set; }
Dessa forma funcionou perfeitamente.
Na minha classe PessoaController busco todas as pessoas do tipo que eu tiver selecionado:
pessoa = _context.Pessoas.Include(x => x.Cliente).Where(x => x.TipoPessoa == tipo);
Envio para View uma ViewBag.Tipo e mostro a View conforme o tipo:
// CAMPOS GERAL DE PESSOAS // NOME // TELEFONES // ENDERECOS @if (ViewBag.Tipo == TipoPessoa.Clientes) { //CAMPOS APENAS DO CLIENTE } @if (ViewBag.Tipo == TipoPessoa.Fornecedor) { //CAMPOS APENAS DO FORNECEDOR }
Dessa forma, basicamente vou ter apenas uma Controller, uma Model e uma View para representar pessoas do tipo que quiser (Clientes, Fornecedores, Colaboradores, Usuarios, Transportadores, Contatos...etc)
Deu trabalho, mas valeu apenas.
- Marcado como Resposta DevMaicon terça-feira, 10 de abril de 2018 19:51