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

More Related Content

What's hot (8)

Artigo c#
Artigo c#Artigo c#
Artigo c#
 
UML
UMLUML
UML
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
A Linguagem UML
A Linguagem UMLA Linguagem UML
A Linguagem UML
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - Adapter
 
Componentes
ComponentesComponentes
Componentes
 

Viewers also liked

Tudo o que sempre quis saber sobre o LINQ
Tudo o que sempre quis saber sobre o LINQTudo o que sempre quis saber sobre o LINQ
Tudo o que sempre quis saber sobre o LINQComunidade NetPonto
 
Palestra: LINQ via C#
Palestra: LINQ via C# Palestra: LINQ via C#
Palestra: LINQ via C# Thiago Vidal
 
LINQ - C#
LINQ - C#LINQ - C#
LINQ - C#fpadoan
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging ChallengesAaron Irizarry
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with DataSeth Familian
 
3 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 20173 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 2017Drift
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 

Viewers also liked (9)

Introdução ao LINQ
Introdução ao LINQIntrodução ao LINQ
Introdução ao LINQ
 
Tudo o que sempre quis saber sobre o LINQ
Tudo o que sempre quis saber sobre o LINQTudo o que sempre quis saber sobre o LINQ
Tudo o que sempre quis saber sobre o LINQ
 
Palestra: LINQ via C#
Palestra: LINQ via C# Palestra: LINQ via C#
Palestra: LINQ via C#
 
LINQ - C#
LINQ - C#LINQ - C#
LINQ - C#
 
Linq
LinqLinq
Linq
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging Challenges
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 
3 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 20173 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 2017
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Similar to Introdução ao Entity Framework 4

Deep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkDeep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkLuciano Condé
 
[CLPE] Novidades do Entity Framework 4
[CLPE] Novidades do Entity Framework 4[CLPE] Novidades do Entity Framework 4
[CLPE] Novidades do Entity Framework 4Felipe Pimentel
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4CDS
 
Apresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkApresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkMatteus Barbosa
 
Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4Luciano Condé
 
Entity Framework 4 & WCF Data Services
Entity Framework 4 & WCF Data ServicesEntity Framework 4 & WCF Data Services
Entity Framework 4 & WCF Data ServicesMarcelo Paiva
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...Rogério Moraes de Carvalho
 
DotNetDay novidades entityframework 4
DotNetDay novidades entityframework 4DotNetDay novidades entityframework 4
DotNetDay novidades entityframework 4Marcelo Paiva
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Técnicas de orm com o framework
Técnicas de orm com o frameworkTécnicas de orm com o framework
Técnicas de orm com o frameworkDennes Torres
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...Rogério Moraes de Carvalho
 
Comparacao Estrategica sobre as Tecnologias de Acesso a Dados da Microsoft
Comparacao Estrategica sobre as Tecnologias de Acesso a Dados da MicrosoftComparacao Estrategica sobre as Tecnologias de Acesso a Dados da Microsoft
Comparacao Estrategica sobre as Tecnologias de Acesso a Dados da MicrosoftLuciano Condé
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Entity Framework Code First
Entity Framework Code FirstEntity Framework Code First
Entity Framework Code FirstWaldyr Felix
 
Bancos de Dados Orientados a Objeto
Bancos de Dados Orientados a ObjetoBancos de Dados Orientados a Objeto
Bancos de Dados Orientados a Objetoelliando dias
 

Similar to Introdução ao Entity Framework 4 (20)

Deep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkDeep Dive sobre Entity Framework
Deep Dive sobre Entity Framework
 
[CLPE] Novidades do Entity Framework 4
[CLPE] Novidades do Entity Framework 4[CLPE] Novidades do Entity Framework 4
[CLPE] Novidades do Entity Framework 4
 
ORM e EF
ORM e EFORM e EF
ORM e EF
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4
 
Aula1
Aula1Aula1
Aula1
 
Apresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkApresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity Framework
 
Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4
 
Entity Framework 4 & WCF Data Services
Entity Framework 4 & WCF Data ServicesEntity Framework 4 & WCF Data Services
Entity Framework 4 & WCF Data Services
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
 
`
``
`
 
DotNetDay novidades entityframework 4
DotNetDay novidades entityframework 4DotNetDay novidades entityframework 4
DotNetDay novidades entityframework 4
 
Uml
UmlUml
Uml
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Introducao ao .Net
Introducao ao .NetIntroducao ao .Net
Introducao ao .Net
 
Técnicas de orm com o framework
Técnicas de orm com o frameworkTécnicas de orm com o framework
Técnicas de orm com o framework
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
 
Comparacao Estrategica sobre as Tecnologias de Acesso a Dados da Microsoft
Comparacao Estrategica sobre as Tecnologias de Acesso a Dados da MicrosoftComparacao Estrategica sobre as Tecnologias de Acesso a Dados da Microsoft
Comparacao Estrategica sobre as Tecnologias de Acesso a Dados da Microsoft
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Entity Framework Code First
Entity Framework Code FirstEntity Framework Code First
Entity Framework Code First
 
Bancos de Dados Orientados a Objeto
Bancos de Dados Orientados a ObjetoBancos de Dados Orientados a Objeto
Bancos de Dados Orientados a Objeto
 

Introdução ao Entity Framework 4

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