EF 5 Release Candidate 1
A versão Core 5 RC 1 veio com tantas novidades, entre muitas delas o relacionamento que já existe a muito tempo na versão 6 que é o muitos para muitos (N:M), e também serão citados outros recursos:
Muitos para muitos
Temos duas formas de configurar esse tipo de relação:
1 — Implícita:
Significa que ao configurar duas coleções entre duas entidades automaticamente é criado a relação com uma tabela intermediária, exemplo:
Author:
Book:
somente com essa configuração já tem o relacionamento esperado muitos para muitos em precisar configurar nenhum tipo de entidade explicitamente.
2 — Explicita
Agora existe uma forma de criar um entidade intermediária e configurar essa explicitamente para que tenha de certa forma controles em nomes e maneiras de utilizar essa relação com tabela intermediária, exemplo:
Seguindo as duas entidades do item 1. Implicita crie mais um entidade com o seguinte layout:
e a partir dessa nova entidade que vai simbolizar a tabela intermediária também precisa explicitar a configuração:
e nesse aspecto pode também ser configurado outros campos nessa tabela intermediária, acredito que a forma 2 é em relação a adição de mais campos nessa tabela intermediária, se não for adicionar mais campos o exemplo 1 é para mim o mais recomendável.
Um novo jeito de mapear?
Foi mencionado na referencia desse artigo que pode criar entidades diferentes com o mesmo tipo CLR(Common Language Runtime). É para mim um grande novidade, mas, basicamente no exemplo mencionado é o uso do dicionário de dados, aquele que tem chave e valor. (Dictionary<,>). Vamos para o exemplo que demonstra com esse recurso é fácil de ser implementado:
Crie um DbSet<> com a seguinte nomenclatura:
e para configurar esse tipo de entidade utilize método SharedTypeEntity
é feito da seguinte maneira:
basicamente esse tipo vai significar no seu banco de dados, uma tabela com o nome de Items onde possui 3 campos Id do tipo inteiro auto incremento, Title do tipo texto, obrigatório e com no máximo 100 caracteres e por fim um Status, obrigatório com o valor padrão como False.
Também pode ser criados relações entre essas entidades diferentes vamos assim dizer que não limita a utilizar nesse sentido.
Como salvar um registro:
Como fazer filtros:
ou seja, pelo que pude perceber precisamos trabalhar com cast
para que as funções de traduções para SQL sejam feitas corretamente, porque o dicionário o valor é um objeto. Feita a execução no SQL Server e monitorando pelo SQL Server Profile que é uma boa dica para verificar se a tradução está correta e sim está tudo certo.
A demais operações segue o mesmo padrão como nas entidades com tipo definidos (class
).
Eventos
Com esse novo recurso pode ser interceptado os eventos da camada, exemplo, agora é possível manipular entidades antes de ser realmente salvas ou atualizadas e também pode ser executados depois dessas ações ou ainda capturar erros.
Um exemplo legal para apresentar esse recurso é criar propriedades a serem alteradas nesses eventos, por exemplo quando cria um registro na tabela podemos saber a data e hora da gravação de criação desse registro e também todas as ultimas atualizações em determinado campo, tipo um controle Criado em e Atualizado em.
Primeiramente crie uma interface para representar esses duas implementações de campo:
então todas as classes que implementam essa interface terá um recurso exclusivo no momento da criação e também no momento da atualização. Com um classe chamada Animal
é implementado os dois campos, exemplo:
Com essa classe Animal
os dois campos CreatedAt
e UpdatedAt
serão atualizados em um determinado eventos. A partir disso vamos criar um Interceptor
com a implementação da classe SaveChangesInterceptor
:
esse código faz uma pesquisa em entidades com dois status Adicionados e Alterados e também se essa entidade implementou a interface
IModified
, e esse resultado altera as duas propriedades conforme a lógica que antes de gravar tem um processo a ser feito passando o valor de data e hora para as propriedades e assim por fim é salvo os dados todos atualizados.
Dentre os eventos permitidos são:
e no caso são 3 grupos que significa
- Falhou (
SaveChangeFailed
) - Salvou (
SavedChanges )
- Salvando (
SavingChanges
)
Visões (
View
) e dados formatados
A utilização de visões ou View
foram alterados, melhoradas e simplificadas para essa nova versão, vamos supor que na criação de uma View
é retornado 2 campos:
e no banco é criado um View
com o nome de View_Animal
:
e por fim configurar da seguinte forma:
Além desses recursos, tem melhorias em desempenho e simplificação no desenvolvimento com esse ORM.
Referencias