Introdução ao Entity Framework 4

13,670 views

Published on

Introdução a utilização do ADO .NET Entity Framework, tecnologia que vem rápidamente ganhando muita popularidade como camada de persistência.

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
  • importante
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
13,670
On SlideShare
0
From Embeds
0
Number of Embeds
3,277
Actions
Shares
0
Downloads
222
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Introdução ao Entity Framework 4

  1. 1. Introdução ao Entity Framework 4<br />Everton Coimbra de Araújo<br />everton@utfpr.edu.br<br />http://pptinformatica.com.br/wordpress<br />http://twitter.com/evertonfoz<br />Fábio Augusto Pandolfo<br />fabiopand@gmail.com<br />http://dotando.blogspot.com<br />http://twitter.com/fabiopand<br />
  2. 2. Objetivos<br />Contextualizar alguns conceitos relacionados à persistência de dados, bem como algumas disparidades encontradas entre os modelos relacional e orientado à objetos. <br />Introduzir a utilização do ADO .NET Entity Framework, tecnologia que vem rápidamente ganhando muita popularidade como camada de persistência.<br />
  3. 3. Agenda<br />Visão geral sobre persistência<br />Diferenças de Impedância<br />Mapeamento Objeto/Relacional<br />Entity Framework<br />Database-First<br />Model-First<br />Code-First<br />N-Tier<br />Opções de consulta<br />Entity Client<br />Entity SQL<br />LINQ To Entities<br />
  4. 4. Orientação a objetos<br />Herança<br />Polimorfismo<br />Encapsulamento<br />
  5. 5. Persistência<br />Para que serve?<br />Quais as práticas mais utilizadas?<br />
  6. 6. Modelo Relacional<br />Armazenamento<br />Manutenção<br />Integridade<br />Transações<br />
  7. 7. Dificuldades impostas<br />Cada propriedade de um objeto a ser persistida precisa ser mapeada para seu respectivo campo na tabela.<br />O desenvolvedor precisa conhecer banco de dados e orientação a objetos.<br />Muito trabalho de codificação.<br />
  8. 8. Diferença de Paradigmas (Impedância)<br />Granularidade<br />Herança e polimorfismo<br />Identidade<br />Associações<br />Navegação<br />
  9. 9. Diferença de Paradigmas (Impedância)<br />O exemplo abaixo não apresenta problemas de descasamento de paradigma<br />
  10. 10. Diferença de Paradigmas (Impedância)<br />Disparidade entre o objeto-relacional não aparece<br />public classRevistas { <br />privatelong id; <br />private String nome; <br /> private List<Artigo> artigos; <br />//(get/set), etc...<br />}<br />public classArtigo { <br />privatelong id; <br />private String titulo; <br /> private Revista revista;<br />//get/set, etc...<br />} <br />create table REVISTAS ( <br /> ID BIGINT NOT NULL PRIMARY KEY,<br />NOME NVARCHAR(50) NOT NULL<br />)<br />create table ARTIGOS ( <br />ID BIGINT NOT NULL PRIMARY Key, <br />TITULO NVARCHAR(50) NOT NULL, <br /> REVISTAS_ID BIGINT <br /> FOREIGN KEY REFERENCES REVISTAS<br />)<br />
  11. 11. Problema de granularidade<br />Imagine uma tabela de autores<br />
  12. 12. Problema de granularidade<br />E se o usuário tiver um endereço<br />Deve ser uma nova tabela? Deve aparecer como colunas extras na tabela do usuário?<br />Problema<br />Objetos podem ter vários níveis de granularidade<br />Tabelas (colunas) impõem limites<br />
  13. 13. Problema de granularidade<br />Solução usual<br /> é colocar tudo na tabela USER<br />Problema fácil de solucionar<br />create table AUTORES( <br />ID BIGINT NOT NULL PRIMARY KEY, <br />NOME NVARCHAR(50) NOT NULL, <br /> SOBRENOME NVARCHAR(50)<br /> RUA NVARCHAR(50), <br />BAIRRO NVARCHAR(50),<br /> NUMERO NVARCHAR(50), <br />CEP NVARCHAR(50), <br />)<br />AUTOR<br />ENDEREÇO<br />
  14. 14. Problemas com Herança e Polimorfismo<br />O modelo relacional não suporta<br />Queremos escrever consultas que referem-se à classe Cliente e retornar instâncias concretas dessa classe!<br />
  15. 15. Problema de identidade<br />No modelo relacional, existe um critério de igualdade:<br />Chave-primária<br />No mundo Orientado a Ojetos há dois<br />Igualdade de referência (no C# testado com ==) <br />Equivalência (no C# testado com equals())<br />Além disso, mapeamento pode associar vários objetos a uma mesma tabela!<br />Complicações adicionais<br />Chaves naturais<br />Chaves compostas<br />
  16. 16. Problema de associações<br />A orientação a objetos representa associações como referências (ou coleções de) referências para objetos<br />São direcionais<br />Para implementar associações bidirecionais, é preciso criar referências dos dois lados da associação<br />Referências dos dois lados podem ser associações muitos-para-muitos<br />No mundo relacional, associações são representadas por chaves estrangeiras<br />Não são direcionais<br />Pode-se criar associações com projeções e joins<br />Associações muitos-para-muitos requerem tabela extra <br />
  17. 17. Problema de navegação<br />Navegação em objetos<br />Pula-se de um objeto para outro sem a definição de um caminho previamente definido<br />Equivalente a fazer um consulta a cada navegação<br />A forma mais natural de navegar entre objetos é a forma menos eficiente de recuperar dados em SQL<br />Soluçao: joins para minimizar as consultas<br />Porém, é preciso traçar o caminho de navegação antes!<br />
  18. 18. Table-per-Hierarchy (TPH)<br />One table in storage to maintain data for all the types in an inheritance hierarchy.<br />
  19. 19. Table-per-Type (TPT)<br />Separate table in storage to maintain data for each type in the inheritance hierarchy.<br />
  20. 20. Como implementar essa estrutura?<br />
  21. 21. Como minimizar a impedância?<br />Com a criação de uma camada de persistência para resolver os problemas de comunicação com a base de dados.<br />Devo criar a camada ou utilizar uma pronta?<br />
  22. 22. Mapeamento Objeto/Relacional<br />Propõe soluções para minimizar a disparidade existente entre a orientação a objetos e o modelo relacional.<br />
  23. 23. Dilema<br />Os desenvolvedores preferem trabalhar com:<br /><ul><li>Modelos conceituais
  24. 24. Objetos de negócio
  25. 25. Classes</li></ul>Bancos de dados foram projetados para:<br /><ul><li>Manutebilidade
  26. 26. Segurança
  27. 27. Eficiência
  28. 28. Escalabilidade</li></li></ul><li>Tecnologias de acesso à dados<br />Acesso à dados em 1990<br /><ul><li>ODBC, embedded SQL</li></ul>Acesso à dados em 2000<br /><ul><li>ADO, Stored Procedures</li></ul>Acesso à dados em 2005<br /><ul><li>ADO.NET, Datasets, DataReaders</li></ul>Acesso à dados em 2010<br /><ul><li>Entity Framework 4</li></li></ul><li>Tecnologias de acesso à dados<br />Entity Framework (EFv1)<br />Introduzido no .NET Framework 3.5 SP1 <br />Juntamente com o Visual Studio 2008 SP1<br />Lançado no em agosto de 2008<br />Entity Framework 4 (EFv4)<br />Parte integrante do .NET 4<br />Lançado em abril de 2010<br />
  29. 29. Limitações do EFv1<br />Ausência de Lazy Loading <br />Sem suporte a Persistence Ignorance<br />Dificuldades para desenvolvimento N-Tier <br />Alguns bugs<br />Entre outras<br />
  30. 30. Fontes de inspiração do EFv4<br />Eric Evans, autor de Domain-Driven-Design: Tackling Complexity in the Heart of Software;<br />Stephen Forte, diretor de estratégia na Telerik e diretor regional da Microsoft;<br />Martin Fowler, autor de Patterns of Enterprise Application Software e muitos outros livros, e criador do termo Persistence Ignorance;<br />Pavel Hruby, autor de Model-Driven Design Using Business Patterns and the Visio Stencil for UML and SysML;<br />Jimmy Nilsson, autor de Applying Domain-Driven Design and Patterns with Examples in C# and .NET e criador das regras para Persistence Ignorance;<br />
  31. 31. O que é o Entity Framework?<br />Uma evolução do pacote de tecnologias ADO.NET<br />Uma camada de abstração dos bancos de dados<br />Separa o modelo físico do conceitual<br />Portabilidade para os mais variados bancos de dados<br />Imagem: http://msdn.microsoft.com/en-us/data/aa937709.aspx<br />
  32. 32. Arquitetura do Entity Framework<br />Imagem: http://www.manning.com/mostarda/<br />
  33. 33. Oque é uma Entidade?<br />Capacidade independente de existência<br />Identificada únicamente.<br />
  34. 34. Entity-Relationship Model (ERM)<br />Nos anos 70 o Dr. Peter Chen inventou o ERM<br />Conceptual Layer<br />Mapping Layer<br />Storage Layer<br />Implementado no Entity Framework (Entity Data Model)<br />
  35. 35. Entity Data Model (EDM)<br />CSDL<br />Mapeamento e Modelagem<br />Entidades<br />Relacionamentos<br />Conjuntos lógicos <br />MSL<br />SSDL<br />
  36. 36. Arquitetura do Entity Data Model<br />Imagem: http://oreilly.com/catalog/9780596520298<br />
  37. 37. Database-First<br />Partindo do Banco de Dados<br />Porque? <br />Já existe!<br />Oque? <br />Cria o modelo a partir dele!<br />
  38. 38. Database-First<br />
  39. 39. Object Services<br />Consultas materializadas como objetos<br />ObjectContext<br />ObjectQuery<T><br />Opções de consulta(prós e contras)<br />Entity SQL (ESQL)<br />Entity Client<br />LINQ to Entities<br />
  40. 40. EntityClient<br />Streams data back to the application <br />Resembles SqlClient, OracleClient and the other client providers<br />using (var conn = new EntityConnection("name=ProgrammingEFDB1Entities")) <br />{ <br /> conn.Open(); <br /> var qStr = "SELECT VALUE c FROM SchoolEntities.Courses AS c "; <br /> var cmd = conn.CreateCommand(); <br /> cmd.CommandText = qStr; <br /> using (var rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))<br /> { <br /> while (rdr.Read())<br /> { <br /> Console.WriteLine(rdr.GetString(1)); <br /> } <br /> } <br />} <br />
  41. 41. EntityClient<br />
  42. 42. Entity SQL (ESQL)<br />T-SQL-like query language<br />Provide the necessary capabilities for querying the EDM<br />EF translates Entity SQL into storage-specific queries<br />var qStr = @"SELECT VALUE c <br /> FROM SchoolEntities.Courses AS c<br /> WHERE c.Title=‘Calculus'";<br /> var courses = context.CreateQuery<Course>(qStr);<br />
  43. 43. Entity SQL (ESQL)<br />
  44. 44. LINQ to Entities<br />Support for LINQ features<br />Full IntelliSense support<br />var courses = from course in context.Courses<br /> where course.Title.StartsWith("C")<br /> orderby course.Title ascending<br /> select new<br /> } <br /> Title = course.Title,<br /> Location = course.Location<br /> };<br />
  45. 45. LINQ to Entities<br />
  46. 46. Model-First<br />Partindo do modelo<br />Porque? <br />Separação entre código e banco de dados!<br />Oque? <br />Cria o banco a partir dele!<br />
  47. 47. Model-First<br />
  48. 48. Carga<br />Eager Loading<br />Explicit Loading<br />Lazy Loading<br />
  49. 49. Carga<br />
  50. 50. Estratégias de herança<br />Table-per-Hierarchy (TPH)<br />Table-per-Type (TPT)<br />
  51. 51. Persistence Ignorance<br />POCO<br />
  52. 52. Code-First<br />Início pelo código<br />Porque? <br />Focado no design do código<br />Banco é um detalhe de implementação!<br />Oque? <br />Codificação de classes, ajustando sua forma com o ContextBuilder<br />Não utiliza EDM!!!<br />http://www.microsoft.com/downloads/details.aspx?FamilyID=af18e652-9ea7-478b-8b41-8424b94e3f58&displayLang=en<br />
  53. 53. Code-First<br />
  54. 54. Text Template Transformation Toolkit(T4)<br />Incluido no Visual Studio 2008<br />Suporte em tempo de execução, mas dificuldades em tempo de design<br />T4 com Entity Framework <br />T4 utilizado para gerar código do modelo<br />Podem ser criados templates T4 customizados<br />Lógica de validação<br />POCOs<br />
  55. 55. Text Template Transformation Toolkit<br />
  56. 56. Estratégias de validação<br />http://stackoverflow.com/questions/191143/entity-framework-validation<br />
  57. 57. Estratégias de validação<br />
  58. 58. Conclusões<br />O Entity Framework ajuda no isolamento entre base de dados e aplicação e aumenta a padronização do desenvolvimento, gerando ganho de produtividade, portabilidade e facilidade de manutenção.<br />
  59. 59. Links interessantes<br />Blog - Fábio Pandolfo - Slides e recursos deste minicurso<br />http://dotando.blogspot.com<br />Data Developer center – Entity Framework<br />http://msdn.microsoft.com/en-us/data/aa937723.aspx<br />EF4 Providers <br />http://msdn.microsoft.com/en-us/data/dd363565.aspx<br />Artigo – Introdução ao ADO.NET Entity Framework 4<br />http://www.devmedia.com.br/websys.2/webreader.asp?cat=1&revista=netmagazine_73#a-2559<br />Artigo – What’s New in Entity Framework 4? Part 1: API Changes<br />http://www.code-magazine.com/Article.aspx?quickid=0911121<br />Artigo – What’s New in Entity Framework 4? Part 1: Modeling Changes<br />http://www.code-magazine.com/article.aspx?quickid=0909081<br />
  60. 60. Links interessantes<br />Julie Lerman<br />http://learnentityframework.com/learnentityframework/<br />Wikipedia - ADO.NET Entity Framework <br />http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework<br />Artigo – Entity Framework – Tutorial and Basics <br />http://www.codeguru.com/csharp/csharp/cs_linq/article.php/c15489<br />Artigo - EF v2 and Data Access Architecture Best Practices<br />http://msdn.microsoft.com/en-us/magazine/ee236639.aspx<br />Video – Entity Framework – What, How, Why<br />http://channel9.msdn.com/shows/Going+Deep/ADONET-Entity-Framework-What-How-Why/<br />Video – Entity Framework – Entity DataSource<br />http://channel9.msdn.com/posts/bursteg/Overview-of-the-EntityDataSource-The-new-ASPNet-Data-Source/<br />
  61. 61. Links interessantes<br />Linq to Entities vs ESQL<br />http://stackoverflow.com/questions/38647/linq-to-entities-vs-esql<br />Some differences between ESQL and LINQ to Entities capabilities<br />http://blogs.msdn.com/diego/archive/2007/12/20/some-differences-between-esql-and-linq-to-entities-capabilities.aspx<br />Choosing an Entity Framework API<br />http://blogs.msdn.com/diego/archive/2007/11/11/choosing-an-entity-framework-api.aspx<br />Building N-Tier applications with the EF – The Basics<br />http://blogs.msdn.com/b/dsimmons/archive/2009/04/09/building-n-tier-applications-with-the-ef-the-basics.aspx<br />N-Tier Application Patterns<br />http://msdn.microsoft.com/en-us/magazine/ee321569.aspx<br />Cenários Distribuídos<br />http://unplugged.giggio.net/unplugged/post/Entity-Framework-em-cenarios-distribuidos.aspx<br />
  62. 62. Livros recomendados<br />http://apress.com/book/view/159059990X<br />Pro Entity Framework 4.0<br />http://apress.com/book/view/1430227036<br />Entity Framework 4.0 Recipes<br />
  63. 63. Livros recomendados<br />http://oreilly.com/catalog/9780596520298<br />Programming Entity Framework<br />http://www.manning.com/mostarda/<br />Entity Framework in Action<br />
  64. 64. Livros recomendados<br />http://www.wrox.com/WileyCDA/WroxTitle/Professional-C-4-0-and-NET-4.productCd-0470502258.html<br />C# 4 and .NET 4<br />

×