Usuário com melhor resposta
C# - Como implementar uma composição entre Pessoa X Cliente

Pergunta
-
Olá pessoal!
Tenho um relacionamento de composição entre Pessoa e Cliente. Sempre que eu instanciar um Cliente, eu preciso passar para ele uma Pessoa, isto é, um cliente não pode existir sem uma Pessoa. Como eu implemento isso na classe Cliente?
Respostas
-
Boa noite Jalber, no .Core ainda tem muitas coisas que os caras estão reescrevendo. O grande problema é que num contexto de ORM esse constutor que eu te passei não vai rolar já que o Entity exige que você tenha um contrutor vazio pra ele poder justamente trazer do banco de dados e instanciar o objeto. Aí você vai ter que só mapear mesmo como uma associação e na sua tabela pelo menos deixar o Cd_pessoa obrigatório.
Rafael Esquiçato Professional Scrum Master MCP, MCTS
- Marcado como Resposta JR-Master segunda-feira, 31 de julho de 2017 16:51
Todas as Respostas
-
Boa noite,
Acho que a forma mais simples é garantir isso já no construtor mesmo, como não há construtor vazio, não é possível instanciar sem fornecer uma pessoa.
public class Cliente { private Pessoa _pessoa = null; public Cliente(Pessoa pessoa) { this._pessoa = pessoa; }
}
Apesar de você ter modelado isso como uma composição, olhando me parece herança seja o caso já que a classe Cliente estende o comportamento da classe Pessoa.
Rafael Esquiçato Professional Scrum Master MCP, MCTS
-
Obrigado por ter respondido Rafael Esquiçato.
Rapaz, isso gera tanta polêmica nos fóruns... Estou usando o Entity Framework Core, mas ele não consegue mapear herança (Table Per Type TPT)... Acho que isso será disponibilizado nas próximas versões... Aí, pesquisando na net, achei alguns tutoriais e aconselhavam usar a composição em vez de herança... Somente em casos extremos... Então, resolvi fazer esse relacionamento com Composição e me aventurar kkkkkkkk.
-
Boa noite Jalber, no .Core ainda tem muitas coisas que os caras estão reescrevendo. O grande problema é que num contexto de ORM esse constutor que eu te passei não vai rolar já que o Entity exige que você tenha um contrutor vazio pra ele poder justamente trazer do banco de dados e instanciar o objeto. Aí você vai ter que só mapear mesmo como uma associação e na sua tabela pelo menos deixar o Cd_pessoa obrigatório.
Rafael Esquiçato Professional Scrum Master MCP, MCTS
- Marcado como Resposta JR-Master segunda-feira, 31 de julho de 2017 16:51
-