Download - Deep Dive sobre Entity Framework
Entity Framework 4.0
Luciano CondéArquiteto de Soluçõeshttp://blogs.msdn.com/condehttp://twitter.com/luconde
Agenda
Por que ORMs?O que é Entity FrameworkModelos no Entity FrameworkConsiderações
<1>
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
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
ORM em Windows
DiversosNhibernateEntitySpacesOpen AccessDevForceXPO
Não há um “vencedor” em definitivo
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)
</1>
<2>
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
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
Arquitetura
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
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
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)
</2>
<3>
Como começar?
• “banco de dados é a verdade”
Database
First
• “O modelo é a verdade”ModelFirst
• “O código é a verdade”CodeFirst
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
Demo
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
Demo
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
Demo
</3>
<4>
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
Considerações - Consultas
QueriesLinq to EntitiesEntity SQLQuerybuilder
Preferência para Linq to EntitiesLazy loading X Early loading
Considerações – Extensão
EntidadesPropriedades OnPropertyChange
ObjectContextSavingChangesOnContextCreated
Uso de DTOs para transportar os dadosConsidere o uso de T4Procs e views
Continuam sendo utilizadas
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
Considerações - TransaçãoImplícitas
Explícitas
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
</4>
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
© 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.