Você está na página 1de 15

Entity Framework

Code First

C# WebDeveloper - Formação Fullstack


Professor Sergio Mendes
Entity Framework Code First

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


O Entity permite que façamos um mapeamento dos elementos de nossa
base de dados para os elementos de nossa aplicação orientada a objetos,
possuindo três linhas principais de utilização: Database First, Model First e
Code First. Ao longo deste artigo apresentaremos os principais conceitos do
EF onde abordaremos estas três linhas de utilização, conhecendo as
características de cada uma.
O uso de ORMs (Object-Relational Mappers) auxilia na produtividade e o
Entity Framework é um dos melhores frameworks neste quesito.
Com o uso do mesmo você poderá aproveitar as facilidades do
mapeamento objeto-relacional em sua aplicação, obtendo o máximo de
produtividade na persistência e recuperação de dados.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


ORM (Object Relational Mapper) é uma técnica de mapeamento objeto relacional que permite fazer uma
relação dos objetos com os dados que os mesmos representam. Ultimamente tem sido muito utilizada e
vem crescendo bastante nos últimos anos.
Este crescimento tem se dado principalmente pelo fato de muitos desenvolvedores não se sentirem a
vontade em escrever código SQL e pela produtividade que esta técnica nos proporciona.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


Code First : Neste modelo, vamos primeiro criar classes de entidade com as propriedades definidas na
mesma. A estrutura de entidade irá criar o banco de dados e tabelas com base nas classes de entidade
definidas. Assim a base de dados é gerada a partir do código.

Vantagens:

•Você pode criar o banco de dados e tabelas de seus objetos de negócios.


•Você pode especificar quais coleções relacionadas são carregadas, serializadas, ou não.
•Controle de versão de banco de dados.
•Bom para pequenas aplicações.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


No mundo relacional prevalecem princípios matemáticos com a finalidade de armazenar e gerenciar
corretamente os dados, de forma segura e se trabalha com a linguagem SQL que é utilizada para dizer o
banco de dados “O QUE?” fazer e não como fazer.
Já no mundo orientado a objetos trabalhamos com classes e métodos, ou seja, trabalhamos fundamentados
na engenharia de software e seus princípios que nos dizem “COMO” fazer. O ORM é justamente, a ponte
entre estes dois mundos, ou seja, é ele quem vai permitir que você armazene os seus objetos no banco de
dados. Para isto precisamos fazer um mapeamento dos seus objetos para as tabelas do banco de dados.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


A interface IEntityTypeConfiguration permite o mapeamento ORM individual de nossas entidades, tornamos
o comportamento de nosso método OnModelCreating mais simples e encapsulando o mapeamento de
nossas entidades em classes próprias para isso.
A vantagem deste recurso é deixar o código mais simples, reutilizável e manutenível, sem permitir que um
único método faça o mapeamento de todo um sistema, o que é bastante ruim.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


O code-first é comumente usado quando se quer ter um controle maior há nível de código-fonte do modelo
de dados gerado, pois as classes são escritas usando a metodologia POCO e, em seguida, é que o banco de
dados é gerado a partir dessas classes.

Essa abordagem é muito usada por desenvolvedores que seguem os princípios do Domain-Driven Design
(DDD), onde as classes são codificadas, primeiro para gerar o banco de dados necessário para persistir os
dados.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


O Code First funciona muito bem e é muito fácil de usar. Mas ele não tem uma característica importante, o
tratamento das alterações do esquema de banco de dados (adicionar/remover/modificar colunas, tipos de
dados, restrições, etc.) relacionadas com as alterações feitas no modelo de entidades.

Usando o Code First quando você altera o modelo de entidades gerado você tem que recriar o seu banco de
dados novamente acarretando assim perda dos dados ou tem que gerar scripts SQL para manualmente
refletir as alterações no banco de dados se não quiser perder os dados.

O Migrations veio para suprir a falta deste recurso no Code First.

Usando o recurso MIgrations do Entity Framework podemos realizar alterações em nosso modelo de
entidades e ter a atualização automática do banco de dados refletindo essas mudanças.

Através do Code First podemos gerar de forma automática o nosso modelo de dados a partir do modelo de
entidades e com o Migrations podemos gerar atualizações no banco de dados refletindo as alterações
porventura feitas no modelo de entidades.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


Dessa forma o Migrations pode ser usado com o Code First para automatizar de vez o processo de geração e
atualização do modelo de dados com base no modelo de entidades onde o Migrations vai manter o modelo
de dados gerado via Code First sempre atualizado com as classes do modelo de entidades. Podemos usar o
Migrations de forma totalmente automática onde todo o processo de atualização do banco de dados é feita
de forma transparente pelo Migrations.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


DbContext representa uma combinação dos padrões Unit-Of-Work e Repository e permite consultar um
banco de dados e agrupar as alterações que serão gravadas de volta ao armazenamento como uma unidade.
DbContext é conceitualmente semelhante ao ObjectContext.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


Unit Of Work ou Unidade de Trabalho é um padrão
de projeto, e, de acordo com Martin Fowler, o padrão
de unidade de trabalho "mantém uma lista de objetos
afetados por uma transação e coordena a escrita de
mudanças e trata possíveis problemas de
concorrência".
O padrão Unit of Work esta presente em quase todas
as ferramentas OR/M atuais (digo quase pois não
conheço todas) e geralmente você não terá que criar a
sua implementação personalizada a menos que decida
realmente fazer isso por uma questão de força maior.
Então o padrão Unit of Work pode ser visto como
um contexto, sessão ou objeto que acompanha as
alterações das entidades de negócio durante uma
transação sendo também responsável pelo
gerenciamento dos problemas de concorrência que
podem ocorrer oriundos dessa transação.
C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes
Ao utilizar o padrão Repository você pode realizar a persistência e a separação de interesses em seu código de
acesso a dados visto que ele encapsula a lógica necessária para persistir os objetos do seu domínio na sua
fonte de armazenamento de dados.
Em suma, você pode usar o padrão Repository para desacoplar o modelo de domínio do código de acesso a
dados.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes


As chamadas Lambda Expressions, ou Expressões Lambda, são parte integrante da LINQ (Language Integrated
Query), um recurso do .NET Framework cuja função é realizar consultas a listas de objetos,
independentemente de seu tipo. Utilizando esta sintaxe, é possível filtrar conjuntos de dados realizando
operações complexas de avaliação, tais como as que são realizadas no banco de dados utilizando SQL.

C# WebDeveloper - Formação Fullstack| Professor: Sergio Mendes

Você também pode gostar