Transcript
Page 1: MAD II - ADO.Net Entity Framework com Sql Server 2008

Microsoft Academy Day

ADO.NET Entity FrameworkFlavio Medeiros Sales – [email protected]

Page 2: MAD II - ADO.Net Entity Framework com Sql Server 2008

Microsoft Academy Day – ANO II

Realização

Page 3: MAD II - ADO.Net Entity Framework com Sql Server 2008

Agenda

• Modelagem de Entidades

• Mapeando do SQL Server 2008 para Objetos

• ADO.NET e EntityClient

• A linguagem SQL para entidades

• Object Context

• LINQ to Entities

Page 4: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entity Framework

• O Entity Data Model (EDM)– Descreve o esquema conceitual

• Modelo de mapeamento– Esquema conceitual de armazenamento no banco de dados

• O Entity Data Provider– Um provedor ADO.NET independente de banco de dados para o EDM

• Entity SQL– Uma versão extendida do SQL para EDM

• Object Services– Adiciona gerenciamento de mudanças, identidade de objeto, attach /

detach

• LINQ to Entities– Uma implementação de LINQ sobre EDM

Page 5: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entity Framework Overview

Page 6: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entity Data Model

• Entity Data Model é um modelo conceitual de um escopo de problema– Um modelo de objetos, independente de estratégia de armazenamento

– Entidades podem possuir tipos simples• Tipos de bancos de dados relacionais (Ex.: int)

– Entidades podem conter tipos complexos• Tipos com múltiplos atributos (ex. endereço)

– Os relacionamentos entre as entidades também são classes

Page 7: MAD II - ADO.Net Entity Framework com Sql Server 2008

Modelo de mapeamento

• Mapeamento entre o modelo conceitual e o modelo de armazenamento

• Modelo de mapeamento implementado via três arquivos XML:– Cada um tem seu próprio vocabulário XSD

– Esquema conceitual (CSDL)

– Esquema de armazenamento (SSDL)

– Esquema de mapeamento (MSL)

• Mapeamentos geralmente são gerados por ferramentas de automação– EDMGen.exe – ferramenta de linha de comando

– Entity Designer – ferramenta gráfica

Page 8: MAD II - ADO.Net Entity Framework com Sql Server 2008

Mapeamento e Bancos de dados

• Os modelos de mapeamento suportam – Tabelas e visões como EntitySet

– Restrições de chaves estrangeiras como AssociationSet

– Stored Procedures como FunctionImport

– Funções definidas pelo usuário (UDFs) como FunctionImport

– Visões de cliente – similar à visão no banco de dados porém definido no nível do modelo de mapeamento com consultas específicas

Page 9: MAD II - ADO.Net Entity Framework com Sql Server 2008

USANDO ENTIDADES

Demo

Page 10: MAD II - ADO.Net Entity Framework com Sql Server 2008

Tipos de objeto e estruturas

• Entity Container - Possui Entity Sets e Association Sets

• Entity Set - Possui Entidades

• Tipo Entity – o objeto de dados principal– Chave de Entidade (Entity Key) – requerido para o tipo Entity

– Propriedades – Tipos simples ou complexos

• Association Set – Relacionamernto entre entidades– Inclui auto-relacionamento

– 0..1 para 0..1

– 0..1 para 1

– 0..1 para *

– * para *

Page 11: MAD II - ADO.Net Entity Framework com Sql Server 2008

Herança

• O mapeamento suporta herança no modelo conceitual– Tabela por hierarquia

– Tabela por tipo

– Tabela por tipo completo

• Inclui associações entre tipos derivados

Page 12: MAD II - ADO.Net Entity Framework com Sql Server 2008

Divisão de entidades

• Os atributos de uma entidade podem ser divididos entre duas tabelas

• Entidade Cliente composta por linhas de– Tabela Cliente de Internet

– Tabela Cliente Loja Física

– Identificado por um discriminador na entidade

• Atributos divididos entre duas tabelas – Entidade criada a partir de um join

Page 13: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entidades e tipos de dados

• O EDM suporta um conjunto limitado de tipos primitivos– Binary, Byte, Boolean, SByte

– Int16, Int32, Int64

– Decimal, Double, Single

– DateTime, TimeSpan, DateTimeOffset

– String (Unicode)

– Guid

• Nem todos os tipos de dados são suportados em todos os bancos de dados– O provedor define o mapeamento entre os tipos do EDM e do banco de

dados

• Tipos definidos pelos usuários não são suportados

Page 14: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entity Provider

• Entity Provider nada mais é do que um provedor de dados do ADO.NET– O banco de dados deste provedor é o EDM

• Publica o mesmo modelo do provedor ADO.NET– EntityConnection

– EntityCommand

• Um “provedor de serviços"– Trabalha sobre qualquer provedor de dados do ADO.NET

– O implementador do provedor precisa suportar interfaces adicionais

– Implementações para SQL Server e SQLCE

Page 15: MAD II - ADO.Net Entity Framework com Sql Server 2008

Porque um Entity Provider?

• Compatibilidade com o modelo existente– É possível atualizar o código atual para trabalhar com o

EDM

• Várias ferramentas trabalham com probvedores ADO.NET– SQL Server Integration Services

– SQL Server Reporting Services

– Crystal Reports

Page 16: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entity SQL

• Uma linguagem parecida com SQL, com algumas extensões– Baseada em texto, como o SQL

• Adiciona o conceito de objeto para o SQL– Alguns conceitos definidos pelo SQL-1999

• Ex. SELECT um objeto inteiro

– Vai além do SQL-1999• Ex. Expressões para analisar entidades

Page 17: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entity SQL Extended KeywordsKeyword Meaning

VALUE Retorna o valor de uma entidade

REF Retorna a referência para uma instância de entidade

DEREF Retorna o valor a partir de uma referência de entidade

NAVIGATE Navega pelo relacionamento entre entidades

IS (NOT) TYPE OF A expressão é do tipo ou de algum sub-tipo do tipo sendo testado

TREAT Trata o tipo informado como um tipo derivado

MULTISET Constrói um multiset a partir de um conjunto de valores

ROW Constrói uma linha de tipo anônimo

ANYELEMENT Retorna qualquer elemento como uma coleção multi-valorada

FLATTEN Converts collection of collections to a flat collection

Page 18: MAD II - ADO.Net Entity Framework com Sql Server 2008

Entity SQL and Entity Provider

• Entity SQL is the query language of the Entity Provider

• EntityCommands use eSQL

• Objects returns as DataRecord(s)– Simple Types

– Row Types

– Object Instances

• Relational and Object Concepts Supported

• eSQL is parsed into a CommandTree

• Provider neutral– Provider must turn CommandTree into database-specific SQL statements

Page 19: MAD II - ADO.Net Entity Framework com Sql Server 2008

ENTITY PROVIDER

Demo

Page 20: MAD II - ADO.Net Entity Framework com Sql Server 2008

Using the ADO.NET Entity Provider

// named connection points at model filesusing (EntityConnection con = new EntityConnection("Name=Northwind")){ con.Open(); // command uses eSQL using (EntityCommand cmd = new EntityCommand( "SELECT VALUE c FROM Northwind.Customers", con)) { using (EntityDataReader rdr = cmd.ExecuteReader( CommandBehavior.SequentialAccess)) { // DataReader has a variety of shapes // process DataReader here } }}

// named connection points at model filesusing (EntityConnection con = new EntityConnection("Name=Northwind")){ con.Open(); // command uses eSQL using (EntityCommand cmd = new EntityCommand( "SELECT VALUE c FROM Northwind.Customers", con)) { using (EntityDataReader rdr = cmd.ExecuteReader( CommandBehavior.SequentialAccess)) { // DataReader has a variety of shapes // process DataReader here } }}

Page 21: MAD II - ADO.Net Entity Framework com Sql Server 2008

Object Services

• Atualmente o Entity Provider suporta somente consultas

• Ações CUD são implementadas via Object Services

• Object Services suporta– Gerenciamento de alterações

– Object Identity

– Substituição de INSERT/UPDATE/DELETE por stored procedures

– Concorrência em nível de coluna para atualizaçãoes (UPDATE)

– System.Transactions ou transações explícitas

Page 22: MAD II - ADO.Net Entity Framework com Sql Server 2008

Object Query

• Object Query é uma classe genérica– ObjectQuery<T> é definidio em todas as entidades

– Projeções usam ObjectQuery<DbDataRecord>

• Usa eSQL como linguagem de consulta

• Suporta parâmetros

• Execute retorna um ObjectResult<T>– MergeOption especifica as opções de identificação de objeto

• AppendOnly

• NoTracking

• PreserveChanges

• OverwriteChanges

Page 23: MAD II - ADO.Net Entity Framework com Sql Server 2008

Usando Object Servicesusing (ObjectContext ctx = new ObjectContext("Name=Northwind")){ ObjectQuery<Customers> query1 = ctx.CreateQuery<Customers>( "select value c from Northwind.Customers as c");

// query executes here ObjectResult<Customers> result = query1.Execute( MergeOption.NoTracking);

ObjectQuery<Customers> query2 = ctx.CreateQuery<Customers>( "select value c from Northwind.Customers as c");

// query executes here foreach (Customers c in query2) Console.WriteLine(c.CustomerID);}

using (ObjectContext ctx = new ObjectContext("Name=Northwind")){ ObjectQuery<Customers> query1 = ctx.CreateQuery<Customers>( "select value c from Northwind.Customers as c");

// query executes here ObjectResult<Customers> result = query1.Execute( MergeOption.NoTracking);

ObjectQuery<Customers> query2 = ctx.CreateQuery<Customers>( "select value c from Northwind.Customers as c");

// query executes here foreach (Customers c in query2) Console.WriteLine(c.CustomerID);}

Page 24: MAD II - ADO.Net Entity Framework com Sql Server 2008

LINQ to Entities

• Object Services pode usar consultas eSQL– Sintaxe não verificável no cliente

– Maior tendência a erros do que SQL porque é uma nova linguagem

• Object Services suporta LINQ to Entities– Sintaxe verificável

– Poder do LINQ sobre o EDM

• LINQ to Entities suporta uma parte do eSQL– A maioria dos operadores de consulta do LINQ

– LINQ pode ser estendido pelo usuário

Page 25: MAD II - ADO.Net Entity Framework com Sql Server 2008

Usando LINQ to EntitiesNorthwind nw = new Northwind()

// select entire entity var query2 = from c in nw.Customers select c;

foreach (var cs in query2) Console.WriteLine("{0} {1}", cs.Customerid, cs.CustomerName);

// simple projection var query2 = from c in nw.Customers select new { CID=c.CustomerID, CName=c.CompanyName };

foreach (var cs in query2) Console.WriteLine("{0} {1}", cs.CID, cs.CName);

Northwind nw = new Northwind()

// select entire entity var query2 = from c in nw.Customers select c;

foreach (var cs in query2) Console.WriteLine("{0} {1}", cs.Customerid, cs.CustomerName);

// simple projection var query2 = from c in nw.Customers select new { CID=c.CustomerID, CName=c.CompanyName };

foreach (var cs in query2) Console.WriteLine("{0} {1}", cs.CID, cs.CName);

Page 26: MAD II - ADO.Net Entity Framework com Sql Server 2008

Revisão

• O Entity Framework usa um EDM como uma camada de armazenamento de dados– Possui seu próprio provedor de dados

– Possui sua própria linguagem de consultas

– Object Services usado para trabalhar com entidades como objetos .NET

• Camada de mapeamento– Mapeia o modelo relacional para o EDM

– Qualquer banco de dados relacional

• LINQ to Entities– Uma implementação do LINQ para EDM e eSQL

Page 27: MAD II - ADO.Net Entity Framework com Sql Server 2008

Recursos extras

• An Entity Data Model for Relational Data Part I: Defining the Entity Data Model , Code Magazine

• http://www.code-magazine.com/Article.aspx?quickid=990712022

• An Entity Data Model for Relational Data Part II: Mapping an Entity Data Model to a Relational Store , Code Magazine

• http://www.code-magazine.com/Article.aspx?quickid=990712032

• Programming Against the ADO.NET Entity Framework, Code Magazine

• http://www.code-magazine.com/Article.aspx?quickid=990712042

28

Page 28: MAD II - ADO.Net Entity Framework com Sql Server 2008

Microsoft Academy Day – ANO II

Dúvidas

Page 29: MAD II - ADO.Net Entity Framework com Sql Server 2008

Microsoft Academy Day – ANO II

Links dos parceiros

• www.linhadecodigo.com.br

• www.devmedia.com.br

• www.lanlink.com.br

• www.ivia.com.br

• www.secrel.com.br

• www.culminis.org

• www.ineta.org

• www.officeceara.com.br

• www.microsoft.com.br

• www.flaviomedeiros.com

Page 30: MAD II - ADO.Net Entity Framework com Sql Server 2008

Microsoft Academy Day

ORBRIGADO !


Top Related