Você está na página 1de 34

Programação Web 3

EntityFramework

Prof. Francisco Rodrigues Santos


francisco.santos@academico.ifs.edu.br

Bacharelado em Sistemas de Informação


Instituto Federal de Sergipe
Campus Lagarto

31 de agosto de 2018

0
Baseado nos slides do prof. Thiers Sousa

1/27
Sumário
1 EntityFramework
O que é EntityFramework
Arquitetura
Outros Frameworks ORM
Por que usar o Entity Framework?
2 Modos de uso do EF
3 DataBase Context
Exemplos
4 Dicas
5 Exercı́cios
6 Migration
7 Leitura complementar

2/27
EntityFramework

3/27
O que é EntityFramework

É um framework que oferece o mapeamento objeto-relacional (ORM);


É open source (mantido pela Microsoft) e o principal Framework.
Utilize o NuGet para adicioná-lo em sua aplicação através do comando
Install-Package EntityFramework
Interage com interfaces ADO.NET para gerar os comandos SQL;
Proporciona o aumento da produtividade do Dev e manutenabilidade da
aplicação
Permite aos desenvolvedores criar uma camada de acesso a dados
através de um modelo conceitual.

3/27
O que é EntityFramework

O mesmo modelo conceitual pode ser mapeado para diferentes base de


dados.
Mapeamentos entre o modelo conceitual e o esquema de banco podem
ser alterados sem precisar alterar o código da aplicação;
Elimina a necessidade de escrita de código de acesso a dados geralmente
necessários.
Manipulação de dados através de objetos fortemente tipados.
Baseado no modelo de provedor existente do ADO.NET

4/27
Alguns banco de dados suportados...

Microsoft SQL Server provider


EntityFramework NuGet package
Microsoft SQL Server Compact Edition provider
EntityFramework.SqlServerCompact NuGet package
Devart dotConnect Data Providers
Devart for a variety of databases including Oracle, MySQL, PostgreSQL,
SQLite, Salesforce, DB2, and SQL Server
Firebird provider
Visual Fox Pro provider
MySQL
PostgreSQL

5/27
Arquitetura App com EntityFramework

6/27
Figura: Arquitetura App com EntityFramework
Arquitetura Detalhada

7/27
Figura: Arquitetura com objetos EF
Outros Frameworks ORM compatı́veis com .NET

Os Frameworks mais utilizados em uma aplicação ASP.NET são:


LINQ to SQL é um Framework ORM legado desenvolvido pela
Microsoft.
LINQ to SQL != LINQ (ver LINQ versus SQL)
NHibernate é um open source ORM para o .NET Framework.
Dapper

8/27
Por que usar o Entity Framework?

Menor tempo de desenvolvimento por fornecer capacidades básicas de


acesso a dados.
Modelo de objetos mais voltados ao aplicativo;
Modelo conceitual independente de SGBD;
Suporte ao Language-Integrated Query (chamado de LINQ to Entities)
fornece validação de sintaxe em tempo de compilação;

Atenção
Microsoft recommends the Entity Framework. (Except for ASP.NET Web
Pages applications that you develop by using WebMatrix)

9/27
Modos de uso do EF

10/27
Modos de uso do EF

10/27
Figura:
Entity Framework - Code First

Forte adesão às convenções


A propriedade ID ou classnameID se tornará a coluna de chave
primária da tabela de banco de dados que corresponde a essa classe.
Campos nulos deverão ser nullable
Propriedades de navegação são normalmente definidos como virtual para
que possam usar recursos do EF como lazy loading
1 p u b l i c L i s t <D i s c i p l i n a > D i s c i p l i n a s { g e t ; s e t ; }

11/27
Lazy, Eager e Explicit Loading

Diferenças entre Lazy e Eager Loading : 1

Lazy loading (default)


When the entity is first read, related data isn’t retrieved. However, the first
time you attempt to access a navigation property, the data required for that
navigation property is automatically retrieved. This results in multiple queries
sent to the database.

Eager loading
When the entity is read, related data is retrieved along with it. This typically
results in a single join query that retrieves all of the data that’s needed. You
specify eager loading by using the Include method.

1
Reading related data with the entity framework in an asp net mvc application

12/27
Lazy, Eager e Explicit Loading

Diferenças entre Explicit Loading :


Explicit loading
This is similar to lazy loading, except that you explicitly retrieve the related
data in code; it doesn’t happen automatically when you access a navigation
property. You load related data manually by getting the object state manager
entry for an entity and calling the Collection.Load method for collections or
the Reference.Load method for properties that hold a single entit

13/27
Resumo de Lazy, Eager e Explicit Loading

Figura: Lazy, Eager e Explicit Loading

14/27
DataBase Context

15/27
Database Context

É a classe principal que coordena a funcionalidade do Entity Framework


para um modelo de dados determinado;
Deriva da classe System.Data.Entity.DbContext
Especifica quais entidades estão incluı́das no modelo de dados;
Possibilita a personalização de um determinado comportamento do
Entity Framework;

2 p u b l i c c l a s s MeuContext : System . Data . E n t i t y . DbContext


3 {
4 p u b l i c MeuContext ( ) : b a s e ( ”NoConnStr ”) { }
5 p u b l i c DbSet<Aluno> A l u n o s { g e t ; s e t ; }
6 }

Objeto de acesso ao banco

15/27
Definindo a string de conexão

Você também pode passar a string de conexão em si, em vez do


nome de um que é armazenada no arquivo .config.
Se não for informado, o EF assume que o nome da string de conexão é
o mesmo que o nome da classe;
Mais detalhes em http://msdn.microsoft.com/en-us/data/jj592674
Abrir o exemplo: ../Slides/Slide1/ADO.NET/ExemploEntityFramework.cs
Veja como criar os dados de teste automaticamente em:
www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/
creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

16/27
Customizando o Data Model usando Attributes

Utiliza o namespace System.ComponentModel.DataAnnotations


Definindo o tipo de dados: [DataType(TipoEsperado)]
Pode ser Date, Time, PhoneNumber, Currency, EmailAddress.
Veja quais são os tipos suportados em http://msdn.microsoft.com/en-us/
library/system.componentmodel.dataannotations.datatype.aspx
Modificando o formato: [DisplayFormat ]
7 [ D i s p l a y F o r m a t ( D a t a F o r m a t S t r i n g = ”{ 0 : yyyy−MM−dd } ” ,
ApplyFormatInEditMode = t r u e ) ]

17/27
Mapeando Tabelas - Data Model

8 p u b l i c c l a s s Aluno
9 {
10 [ R e q u i r e d ] p u b l i c l o n g ID { g e t ; s e t ; }
11 [ DataType ( DataType . E m a i l A d d r e s s ) , MaxLength ( 1 5 0 ) ]
12 [ Required ] p u b l i c s t r i n g Email { get ; s e t ; }
13 [ R e q u i r e d , MaxLength ( 5 0 ) ]
14 p u b l i c s t r i n g Nome { g e t ; s e t ; }
15 }

Mapeamento para a tabela aluno

18/27
Mapeando o banco
16 p u b l i c c l a s s MeuContext : System . Data . E n t i t y . DbContext
17 {
18 p u b l i c MeuContext ( ) : b a s e ( ”NoConnStr ”) { }
19 p u b l i c DbSet<Aluno> A l u n o s { g e t ; s e t ; }
20 }

Objeto de acesso ao banco

21 p u b l i c v o i d FazAlgo ( )
22 {
23 u s i n g ( v a r bd = new MeuContext ( ) )
24 {
25 v a r c o u n t = bd . A l u n o s . Count ( ) ;
26 v a r a l u n o = new Aluno ( . . . ) ;
27 bd . A l u n o s . Add ( i n s t r u t o r ) ;
28 bd . S a v e C h a n g es ( ) ;
29 }
30 }

Acessando e incluindo dados

19/27
Dicas

20/27
Converter para....
Crie a classe com o namespace System:
31 p u b l i c s t a t i c c l a s s TConverter
32 {
33 p u b l i c s t a t i c T To<T>( t h i s o b j e c t v a l u e ) {
34 r e t u r n (T) To ( t y p e o f (T) , v a l u e ) ;
35 }
36 p u b l i c s t a t i c o b j e c t To ( t h i s Type t , o b j e c t v a l u e ) {
37 TypeConverter tc =
TypeDescriptor . GetConverter ( t ) ;
38 r e t u r n t c . ConvertFrom ( v a l u e ) ;
39 }
40 p u b l i c s t a t i c v o i d R e g i s t e r T y p e C o n v e r t e r <T , TC>()
where TC : T y p e C o n v e r t e r {
41 T y p e D e s c r i p t o r . A d d A t t r i b u t e s ( t y p e o f (T) , new
T y p e C o n v e r t e r A t t r i b u t e ( t y p e o f (TC) ) ) ;
42 }
43 }

codigos/ConverterPara.cs

20/27
Converter para....

Para fazer uso:


Adicione o pacote da classe criada
44 s t r i n g numero = ”10 ” ;
45 i n t n = numero . To<i n t >() ;

21/27
Dica: Add Loggin database
Para fazer o logging database operations para um arquivo
Adicione um Interceptor no arquivo de configurações

46 <e n t i t y F r a m e w o r k>
47 < i n t e r c e p t o r s>
48 < i n t e r c e p t o r t y p e=”System . Data . E n t i t y . I n f r a s t r u c t u r e .
I n t e r c e p t i o n . D a t a b a s e L o g g e r , E n t i t y F r a m e w o r k ”>
49 <p a r a m e t e r s>
50 <p a r a m e t e r v a l u e=” l o c a l A r q u i v o . t x t ”/>
51 <!−− s e t append ? −−>
52 <p a r a m e t e r v a l u e=” t r u e ” t y p e=”System . B o o l e a n ”/>
53 </ p a r a m e t e r s>
54 </ i n t e r c e p t o r>
55 </ i n t e r c e p t o r s>
56 ... .
57 </ e n t i t y F r a m e w o r k>

codigos/dica logDataBaseXML.xml

22/27
Exercı́cios

23/27
Exercı́cios

Construir o banco de dados utilizando o EF para


Atender o exercı́cio proposto
Atender o trabalho;
Ao término, enviar para o BitBucket

23/27
Modelo Exercı́cio

24/27
Migration

25/27
Migrations

Utilizado para realizar updates no banco para refletir as mudanças no


model;
O comando Enable-Migrations é utilizado para habilitar o avanço
das versões no banco de dados;
Adiciona a pasta Migrations no projeto;
Cria a classe Configuration : Classe que ensina a configuração a ser
adotada entre as versões;
Cria um migration inicial: utilizado para fazer os comandos de
update e delete , por exemplo.

25/27
Criando e Executando os Migrations
O comando Add-Migration nome-do-migration
adiciona um código contendo a próxima migração com base nas mudanças
que você fez no seu modelo desde que a última migração foi criada;
Update-Database :
Aplica as mudanças pendentes no banco de dados
O parâmetro -Verbose permite que você veja o que está sendo
executado.
Para ir até uma versão especı́fica, use o comando
Update-Database -TargetMigration: AddBlogUrl
A linha abaixo realiza a atualização quando a app é iniciada
58 D a t a b a s e . S e t I n i t i a l i z e r ( new
M i g r a t e D a t a b a s e T o L a t e s t V e r s i o n <MeuContext ,
C o n f i g u r a t i o n >() ) ;
59

26/27
Leitura complementar

27/27
Leitura Complementar

New Features in Entity Framework Core 2.0


Entity Framework Development Approaches
EntityFramework6
EF 4.1 Quick Tip: Add/Attach Returns Your Entity
Code First: Inside DbContext Initialization
Configuring Database Initializers in a config file
Extra lazy collection count
Alternativas para o EF Vários artigos apresentando as caracterı́sticas de
acesso a dados usando .NET e ASP.NET

27/27

Você também pode gostar