Deep Dive sobre Entity Framework

35
Entity Framework 4.0 Luciano Condé Arquiteto de Soluções http://blogs.msdn.com/conde http://twitter.com/luconde

Transcript of Deep Dive sobre Entity Framework

Page 1: Deep Dive sobre Entity Framework

Entity Framework 4.0

Luciano CondéArquiteto de Soluçõeshttp://blogs.msdn.com/condehttp://twitter.com/luconde

Page 2: Deep Dive sobre Entity Framework

Agenda

Por que ORMs?O que é Entity FrameworkModelos no Entity FrameworkConsiderações

Page 3: Deep Dive sobre Entity Framework

<1>

Page 4: Deep Dive sobre Entity Framework

Acesso a dadosAcessando dados em 1990

ODBC, SQL embutido

Acessando dados em 2000ADO, Stored Procedures

Acessando dados em 2005ADO.NET, Datasets, DataReaders

Acessando dados em 2010ORM

Page 5: Deep Dive sobre Entity Framework

Object Relational Mapping

O que é?Uma abstraçãoTécnica para mapear estruturas relacionais de bancos dados como objetos em linguagens OOEsconder detalhes de complexidade do acesso a tabelas

Por que?Produtividade em desenvolvimentoIndependência de banco de dados

Page 6: Deep Dive sobre Entity Framework

ORM em Windows

DiversosNhibernateEntitySpacesOpen AccessDevForceXPO

Não há um “vencedor” em definitivo

Page 7: Deep Dive sobre Entity Framework

Trajetória para um ORM by MS

Datasets Tipados – Entregue Objectspaces “v1” – Nunca entregue Objectspaces “v2” – Nunca entregue Microsoft Business Framework – nunca entregue WinFS – Nunca entregue LINQ TO SQL – Entregue (Novembro/2007) Entity Framework v1 – Entregue (Agosto/2008)

Page 8: Deep Dive sobre Entity Framework

</1>

Page 9: Deep Dive sobre Entity Framework

<2>

Page 10: Deep Dive sobre Entity Framework

Evolução do .NET Framework

.NET 1.0 .NET 1.1 .NET 2.0

3.0

3.5

.NET 4

2002 2003 20102005-08

CLR 1.0 CLR 1.1 CLR 2.0 CLR 4

SP1

Page 11: Deep Dive sobre Entity Framework

Entity Framework

Um ORM que separa o modelo conceitual do físicoPermite a programação OO sobre as entidades – herançaEF “como” um DALFeito para ser multi-bancoSuporta ações CRUD (views, procs e tables)Vários providers disponíveis

SQL Server, Oracle, Mysql, DB2…Suporta transação, concorrência, procs, views

Page 12: Deep Dive sobre Entity Framework

Arquitetura

Page 13: Deep Dive sobre Entity Framework

Entity Framework 1.0 - Recursos

Geração de modelo a partir de um banco de dados (database first)Operações CRUD estão simplificadasSuporte a LINQ (Linq To Entities)Possibilidade de trabalhar com diversos banco de dadosSuporte para SP (retornar, modificar)Ferramenta de Designer embutida

Page 14: Deep Dive sobre Entity Framework

Entity Framework 1.0 - Dores

O EF designer!Model First não suportadoBaixo suporte para Stored ProceduresSem Pluralization/SingularizationForeign Keys escondidasLazy Loading não suportadoFalta de operadores LINQGeração do SQL a desejarSem suporte para POCO (Plain Old CLR Objects)Dificuldade em montagem de N-Tier

Page 15: Deep Dive sobre Entity Framework

Entity Framework 4.0

Suporte para Model-firstPluralization automáticaForeign keys nos modelosSuporte para POCOLazy loadingGeração de código por T4IObjectSetVirtual SaveChangesObjectStateManager control

Self-tracking entitiesMelhoria da geração SQL Melhoria do suporte a LINQExecuteStoreQueryExecuteStoreCommandMelhoria no suporte a SPROCCode-First development (Versão em CTP)

Page 16: Deep Dive sobre Entity Framework

</2>

Page 17: Deep Dive sobre Entity Framework

<3>

Page 18: Deep Dive sobre Entity Framework

Como começar?

• “banco de dados é a verdade”

Database

First

• “O modelo é a verdade”ModelFirst

• “O código é a verdade”CodeFirst

Page 19: Deep Dive sobre Entity Framework

Banco de dados é a verdade

Onde eu uso?Você já tem um banco de dados definidoO banco de dados requer um controle próximo

Como eu uso?Importe o banco de dados para dentro do modelo EDMXUse os recursos do Entity Framework

Banco de dados

Modelo Código

Page 20: Deep Dive sobre Entity Framework

Demo

Page 21: Deep Dive sobre Entity Framework

O modelo é a verdade

Onde eu uso?Definir um modelo de classes sem se preocupar com o banco de dadosGerar o script a partir do modelo

Como eu uso?Gere o modelo EDMXGere o script do banco de dados

Modelo

Banco de dados

Código

Page 22: Deep Dive sobre Entity Framework

Demo

Page 23: Deep Dive sobre Entity Framework

O código é a verdade

Onde eu uso?Definir a suas próprias classesBanco de dados é apenas um detalhe de implementação

Como eu uso?Gere as classesGere o Object de Context

CódigoBanco de

dados

Page 24: Deep Dive sobre Entity Framework

Demo

Page 25: Deep Dive sobre Entity Framework

</3>

Page 26: Deep Dive sobre Entity Framework

<4>

Page 27: Deep Dive sobre Entity Framework

Considerações - ObjectContext

Você controlaPense no tempo de vida de ObjectContextAttached X Detached dos objetosPosso ter múltiplos EDMXs – Organização por cenários ou transações sem conhecimento mútuo

Page 28: Deep Dive sobre Entity Framework

Considerações - Consultas

QueriesLinq to EntitiesEntity SQLQuerybuilder

Preferência para Linq to EntitiesLazy loading X Early loading

Page 29: Deep Dive sobre Entity Framework

Considerações – Extensão

EntidadesPropriedades OnPropertyChange

ObjectContextSavingChangesOnContextCreated

Uso de DTOs para transportar os dadosConsidere o uso de T4Procs e views

Continuam sendo utilizadas

Page 30: Deep Dive sobre Entity Framework

Considerações - Concorrência

Modelo otimistaEscolhas as colunas que deseja “monitorar” – Concurrence Mode para “Fixed”Implemente o tratamento da Exceção “OptimisticConcurrencyException”Em caso de conflito utilize o método Refresh para determinar quem tem a prioridadeVocê é quem controla a frequência de atualização

Page 31: Deep Dive sobre Entity Framework

Considerações - TransaçãoImplícitas

Explícitas

Page 32: Deep Dive sobre Entity Framework

Considerações – POCO, WCF

A existência das propriedades ChangeObjectStateUse self-trackings como acelerador para n-tierDesabilite o lazy loadingCuidado com as colisões de EntityKeyUsando o WCF habilite sempre o log para saber os problemas de conversão de tiposUse DTOs para auxiliar na redução da transferência de classes entre as camadasUse a geração de código T4 para facilitarEstude Proxies

Page 33: Deep Dive sobre Entity Framework

</4>

Page 34: Deep Dive sobre Entity Framework

Links

http://msdn.microsoft.com/en-us/magazine/ee236639.aspx - Boas práticas EF e arquitetura de acesso a dadoshttp://blogs.msdn.com/adonet - Time do Entity Frameworkhttp://blogs.msdn.com/efdesign - Time do Design do Entity Frameworkhttp://blogs.msdn.com/adonet/archive/2008/10/07/migrating-from-linq-to-sql-to-entity-framework-eager-loading.aspx - Migrando de Linq To sql para Entity Frameworkhttp://msdn.microsoft.com/en-us/magazine/cc163286.aspx- Modelando um Entity Data Modelhttp://msdn.microsoft.com/en-us/magazine/cc700340.aspx - Entity Framework sobre arquiteturas de n-layershttp://msdn.microsoft.com/en-us/magazine/cc507640.aspx

- Q & A de Entity Framework http://msdn.microsoft.com/en-us/library/bb399572.aspx 3

4

Page 35: Deep Dive sobre Entity Framework

© 2010 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies.  The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond

to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. 

MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.