4. Acesso a dados Acessando dados em 1990ODBC, SQL embutido Acessando dados em 2000ADO, Stored Procedures Acessando dados em 2005ADO.NET, Datasets, DataReaders Acessando dados em 2010ORM
5. ObjectRelationalMapping O que é? Uma abstração Técnica para mapear estruturas relacionais de bancos dados como objetos em linguagens OO Esconder detalhes de complexidade do acesso a tabelas Por que? Produtividade em desenvolvimento Independência de banco de dados
6. ORM em Windows Diversos Nhibernate EntitySpaces Open Access DevForce XPO Nãohá um “vencedor” em definitivo
7. Trajetória para um ORM by MS DatasetsTipados – 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)
11. Entity Framework Um ORM quesepara o modeloconceitual do físico Permite a programação OO sobre as entidades – herança EF “como” um DAL Feitoparaser multi-banco Suportaações CRUD (views, procs e tables) Vários providers disponíveis SQL Server, Oracle, Mysql, DB2… Suportatransação, concorrência, procs, views
13. Entity Framework 1.0 - Recursos Geração de modelo a partir de um banco de dados (databasefirst) Operações CRUD estão simplificadas Suporte a LINQ (LinqToEntities) Possibilidade de trabalhar com diversos banco de dados Suporte para SP (retornar, modificar) Ferramenta de Designer embutida
14. Entity Framework 1.0 - Dores O EF designer! Model First nãosuportado Baixosuportepara Stored Procedures SemPluralization/Singularization Foreign Keys escondidas Lazy Loading nãosuportado Falta de operadores LINQ Geração do SQL a desejar Semsuportepara POCO (Plain Old CLR Objects) Dificuldadeemmontagem de N-Tier
15. Entity Framework 4.0 Self-tracking entities Melhoria da geração SQL Melhoria do suporte a LINQ ExecuteStoreQuery ExecuteStoreCommand Melhoria no suporte a SPROC Code-First development (Versãoem CTP) Suportepara Model-first Pluralizationautomática Foreign keys nosmodelos Suportepara POCO Lazy loading Geraçãode códigoporT4 IObjectSet Virtual SaveChanges ObjectStateManagercontrol
19. Banco de dados é a verdade Onde eu uso? Você já tem um banco de dados definido O banco de dados requer um controle próximo Como eu uso? Importe o banco de dados para dentro do modelo EDMX Use os recursos do Entity Framework Banco de dados Modelo Código
21. O modelo é a verdade Onde eu uso? Definir um modelo de classes sem se preocupar com o banco de dados Gerar o script a partir do modelo Como eu uso? Gere o modelo EDMX Gere o script do banco de dados Banco de dados Modelo Código
23. O código é a verdade Onde eu uso? Definir a suas próprias classes Banco de dados é apenas um detalhe de implementação Como eu uso? Gere as classes Gere o Object de Context Banco de dados Código
27. Considerações - ObjectContext Vocêcontrola Pense no tempo de vida de ObjectContext Attached X Detached dos objetos Possotermúltiplos EDMXs – Organizaçãoporcenáriosoutransaçõessemconhecimentomútuo
28. Considerações - Consultas Queries Linq to Entities Entity SQL Querybuilder Preferência para Linq to Entities Lazy loading X Early loading
29. Considerações – Extensão Entidades Propriedades OnPropertyChange ObjectContext SavingChanges OnContextCreated Uso de DTOs para transportar os dados Considere o uso de T4 Procs e views Continuam sendo utilizadas
30. Considerações - Concorrência Modelootimista Escolhas as colunasquedeseja “monitorar” – Concurrence Mode para “Fixed” Implemente o tratamento da Exceção “OptimisticConcurrencyException” Emcaso de conflito utilize o método Refresh paradeterminarquem tem a prioridade Você é quemcontrola a frequência de atualização
32. Considerações – POCO, WCF A existência das propriedades ChangeObjectState Use self-trackingscomoaceleradorpara n-tier Desabilite o lazy loading Cuidado com as colisões de EntityKey Usando o WCF habilite sempre o log para saber os problemas de conversão de tipos Use DTOs para auxiliar na redução da transferência de classes entre as camadas Use a geração de código T4 para facilitar Estude Proxies
34. Links http://msdn.microsoft.com/en-us/magazine/ee236639.aspx - Boas práticas EF e arquitetura de acesso a dados http://blogs.msdn.com/adonet - Time do Entity Framework http://blogs.msdn.com/efdesign - Time do Design do Entity Framework http://blogs.msdn.com/adonet/archive/2008/10/07/migrating-from-linq-to-sql-to-entity-framework-eager-loading.aspx - Migrando de Linq To sqlpara Entity Framework http://msdn.microsoft.com/en-us/magazine/cc163286.aspx- Modelando um Entity Data Model http://msdn.microsoft.com/en-us/magazine/cc700340.aspx - Entity Framework sobre arquiteturas de n-layers http://msdn.microsoft.com/en-us/magazine/cc507640.aspx- Q & A de Entity Framework http://msdn.microsoft.com/en-us/library/bb399572.aspx 34
Before we get started, I thought it would be a good idea to review where we have come from:In the past we have delivered monolithic releases. You saw this with .NET versions 1.0 and 1.1 before. When .NET 2.0 shipped we decided to make a “layer cake” of improvements where we added on 3.0, 3.5, and finally 3.5 service pack 1. There were a number of reasons for doing this but chief among them was to make sure you didn’t have to completely retest the CLR every time we incremented it. We did this for about 5 years.You can only keep that system up for so long, however, and 4.0 represents some pretty significant changes and updates to the Framework and the CLR. Because of this we decided to make it stand on its own and have incremented the CLR version accordingly. As such, it will probably have to undergo the testing your security teams have in place and we want to set expectations accordingly. NOTE: This is to make sure folks know the bad news up front. We will use the rest of the session to deliver the good news. Here is where you can find the history of .NET Framework versions: http://en.wikipedia.org/wiki/.NET_Framework_version_list