Introdução ao Entity Framework 4 Everton Coimbra de Araújo [email protected] Fábio.

61
Introdução ao Entity Framework 4 Everton Coimbra de Araújo [email protected] http://pptinformatica.com.br/wordpress http://twitter.com/evertonfoz Fábio Augusto Pandolfo [email protected] http://dotando.blogspot.com http://twitter.com/fabiopand

Transcript of Introdução ao Entity Framework 4 Everton Coimbra de Araújo [email protected] Fábio.

Page 1: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 2: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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.

Page 3: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 4: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Orientação a objetos

• Herança• Polimorfismo• Encapsulamento

Page 5: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Persistência

• Para que serve?• Quais as práticas mais utilizadas?

Page 6: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Modelo Relacional

• Armazenamento• Manutenção• Integridade• Transações

Page 7: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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.

Page 8: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Diferença de Paradigmas (Impedância)

• Granularidade• Herança e polimorfismo• Identidade• Associações• Navegação

Page 9: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Diferença de Paradigmas (Impedância)

• O exemplo abaixo não apresenta problemas de descasamento de paradigma

Page 10: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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)

Page 11: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Problema de granularidade

• Imagine uma tabela de autores

Page 12: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 13: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 14: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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!

Page 15: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 16: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 17: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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!

Page 18: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Table-per-Hierarchy (TPH)

• One table in storage to maintain data for all the types in an inheritance hierarchy.

Page 19: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Table-per-Type (TPT)

• Separate table in storage to maintain data for each type in the inheritance hierarchy.

Page 20: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Como implementar essa estrutura?

Page 21: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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?

Page 22: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Mapeamento Objeto/Relacional

• Propõe soluções para minimizar a disparidade existente entre a orientação a objetos e o modelo relacional.

Page 23: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 24: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 25: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 26: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Limitações do EFv1

• Ausência de Lazy Loading • Sem suporte a Persistence Ignorance• Dificuldades para desenvolvimento N-Tier • Alguns bugs• Entre outras

Page 27: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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;

Page 28: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 29: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Arquitetura do Entity Framework

Imagem: http://www.manning.com/mostarda/

Page 30: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Oque é uma Entidade?

• Capacidade independente de existência• Identificada únicamente.

Page 31: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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)

Page 32: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Entity Data Model (EDM)

• Mapeamento e Modelagem– Entidades– Relacionamentos– Conjuntos lógicos

SSDL

MSL

CSDL

Page 33: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Arquitetura do Entity Data Model

Imagem: http://oreilly.com/catalog/9780596520298

Page 34: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Database-First

• Partindo do Banco de Dados• Porque? – Já existe!

• Oque? – Cria o modelo a partir dele!

Page 35: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Database-First

Page 36: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 37: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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)); • } • } • }

Page 38: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

EntityClient

Page 39: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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);

Page 40: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Entity SQL (ESQL)

Page 41: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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• };

Page 42: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

LINQ to Entities

Page 43: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Model-First

• Partindo do modelo• Porque? – Separação entre código e banco de dados!

• Oque? – Cria o banco a partir dele!

Page 44: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Model-First

Page 45: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Carga

• Eager Loading• Explicit Loading• Lazy Loading

Page 46: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Carga

Page 47: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Estratégias de herança

• Table-per-Hierarchy (TPH)• Table-per-Type (TPT)

Page 48: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Persistence Ignorance

• POCO

Page 49: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 50: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Code-First

Page 51: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 52: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Text Template Transformation Toolkit

Page 53: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Estratégias de validação

• http://stackoverflow.com/questions/191143/entity-framework-validation

Page 54: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Estratégias de validação

Page 55: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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.

Page 56: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 57: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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/

Page 58: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

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

Page 59: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Livros recomendados

http://apress.com/book/view/159059990X

http://apress.com/book/view/1430227036

Pro Entity Framework 4.0

Entity Framework 4.0 Recipes

Page 60: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Livros recomendados

http://www.manning.com/mostarda/

http://oreilly.com/catalog/9780596520298

Programming Entity Framework

Entity Framework in Action

Page 61: Introdução ao Entity Framework 4 Everton Coimbra de Araújo everton@utfpr.edu.br   Fábio.

Livros recomendados

http://www.wrox.com/WileyCDA/WroxTitle/Professional-C-4-0-and-NET-4.productCd-0470502258.html

C# 4 and .NET 4