Introdução ao Entity Framework 4
-
Upload
fabio-pandolfo -
Category
Technology
-
view
13.265 -
download
0
description
Transcript of Introdução ao Entity Framework 4
Introdução ao Entity Framework 4Everton Coimbra de Araú[email protected]://pptinformatica.com.br/wordpresshttp://twitter.com/evertonfozFábio Augusto [email protected]://dotando.blogspot.comhttp://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 class Revistas { private long id; private String nome; private List<Artigo> artigos; //(get/set), etc...}
public class Artigo { private long 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 solucionarcreate 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:• Modelos conceituais• Objetos de negócio• Classes
Bancos de dados foram projetados para:• Manutebilidade• Segurança• Eficiência• Escalabilidade
Tecnologias de acesso à dados
Acesso à dados em 1990• ODBC, embedded SQL
Acesso à dados em 2000• ADO, Stored Procedures
Acesso à dados em 2005• ADO.NET, Datasets, DataReaders
Acesso à dados em 2010• Entity Framework 4
Tecnologias de acesso à dados
• Entity Framework (EFv1)– Introduzido no .NET Framework 3.5 SP1 – Juntamente com o Visual Studio 2008 SP1– Lançado no em agosto de 2008
• Entity Framework 4 (EFv4)– Parte integrante do .NET 4– Lançado em abril de 2010
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)
• Mapeamento e Modelagem– Entidades– Relacionamentos– Conjuntos lógicos
SSDL
MSL
CSDL
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=netmagazi
ne_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-esq
l-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-applicati
ons-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-distri
buidos.aspx
Livros recomendados
http://apress.com/book/view/159059990X
http://apress.com/book/view/1430227036
Pro Entity Framework 4.0
Entity Framework 4.0 Recipes
Livros recomendados
http://www.manning.com/mostarda/
http://oreilly.com/catalog/9780596520298
Programming Entity Framework
Entity Framework in Action
Livros recomendados
http://www.wrox.com/WileyCDA/WroxTitle/Professional-C-4-0-and-NET-4.productCd-0470502258.html
C# 4 and .NET 4