Microsoft Academy Day
ADO.NET Entity FrameworkFlavio Medeiros Sales – [email protected]
Microsoft Academy Day – ANO II
Realização
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
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
Entity Framework Overview
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
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
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
USANDO ENTIDADES
Demo
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 *
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
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
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
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
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
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
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
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
ENTITY PROVIDER
Demo
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 } }}
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
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
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);}
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
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);
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
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
Microsoft Academy Day – ANO II
Dúvidas
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
Microsoft Academy Day
ORBRIGADO !