Herança com C# e Entity (Code First)

C# 7 Replies

Olá novamente,

Desta vez decidi falar sobre algo que achei bem bacana e útil para o dia-a-dia: Herança com Entity.

Comumente utilizo uma tabela de abstração para Entidades de sistema e Objetos de valor. Todas as minhas tabelas são de um destes dois tipos, assim, não tenho que ficar replicando as propriedades:

Neste caso, quando eu tiver uma classe que representa uma entidade no banco, irei sempre herdar de um destes dois modelos, permitindo, assim, generalizar a utilização. Bom, para seguir este perfil, devemos mapear nossa coleção em função da classe filho, ou seja, da entidade que representa a “tabela”:

Quando a migração for efetuada, o banco refletirá a entidade User, com suas propriedades, adicionadas das propriedades de AppEntity.

Outra forma de se trabalhar é fazendo o mapeamento da maneira oposta, por exemplo, quando temos uma entidade Profile e uma especificação, como CustomerProfile. Seguindo esta lógica, a regra de negócio está voltada para Profile e CustomerProfile é apenas um desdobramento e queremos refletir isto no desenvolvimento:

Utilizando esta forma, quando o migrations gerar o banco de dados, ele criará a tabela Profiles, com uma coluna adicionada chamada Discriminator, que conterá o nome da especialização que foi adicionada.

Após este processo, a utilização do código resultante fica um pouco diferente do comum, pois a especialização CustomerProfile deverá ser acessada, para consulta, através da coleção Profiles, com o auxílio do método OfType, já a inclusão permanecerá inalterada, assim:

Assim, customerProfiles será do tipo List<CustomerProfile> e a consulta Where poderá tratar seus parâmetros de acordo com a classe CustomerProfiles.

Enfim, a herança é sempre muito bem vinda quando queremos reduzir o acoplamento do código e generalizar melhor nossas abstrações, permitindo uma melhor manutenção do nosso código e facilitando o trabalho. Lembrando que, quando estas técnicas forem utilizadas, as classes devem ter nomes que remetam à sua função, facilitando a compreensão da estrutura aplicada.

Até mais,

 

7 thoughts on “Herança com C# e Entity (Code First)

  1. test0r0r0 download

    I truly love your blog.. Pleasant colors & theme. Did you develop this web site yourself? Please reply back as I’m looking to create my very own website and would love to know where you got this from or exactly what the theme is called. Appreciate it!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *