Apresentação usada no MAD II(Microsoft Academy Day) sobre o ADO.NET Entity Framework integrado ao SQL Server 2008. A apresentação é parte do SQL Server 2008 Community Launch.
Acesso à demonstrações em http://flaviomedeiros.com/2008/12/22/madii-adonet-entity-framework-material-disponvel/
3. 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
4. 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
6. 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
7. 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
8. 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
10. 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 *
11. 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
12. 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
13. 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
14. 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çosquot;
– Trabalha sobre qualquer provedor de dados do ADO.NET
– O implementador do provedor precisa suportar interfaces
adicionais
– Implementações para SQL Server e SQLCE
15. 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
16. 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
17. Entity SQL Extended Keywords
Keyword 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
18. 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
20. Using the ADO.NET Entity
Provider
// named connection points at model files
using (EntityConnection con =
new EntityConnection(quot;Name=Northwindquot;))
{
con.Open();
// command uses eSQL
using (EntityCommand cmd = new EntityCommand(
quot;SELECT VALUE c FROM Northwind.Customersquot;, con))
{
using (EntityDataReader rdr = cmd.ExecuteReader(
CommandBehavior.SequentialAccess))
{
// DataReader has a variety of shapes
// process DataReader here
}
}
}
21. 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
22. 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
23. Usando Object Services
using (ObjectContext ctx = new
ObjectContext(quot;Name=Northwindquot;))
{
ObjectQuery<Customers> query1 =
ctx.CreateQuery<Customers>(
quot;select value c from Northwind.Customers as cquot;);
// query executes here
ObjectResult<Customers> result = query1.Execute(
MergeOption.NoTracking);
ObjectQuery<Customers> query2 =
ctx.CreateQuery<Customers>(
quot;select value c from Northwind.Customers as cquot;);
// query executes here
foreach (Customers c in query2)
Console.WriteLine(c.CustomerID);
}
24. 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
25. Usando LINQ to Entities
Northwind nw = new Northwind()
// select entire entity
var query2 = from c in nw.Customers
select c;
foreach (var cs in query2)
Console.WriteLine(quot;{0} {1}quot;,
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(quot;{0} {1}quot;, cs.CID, cs.CName);
26. 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
27. 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
29. 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