Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(2010-04-09) - EntityFramework PDF
(2010-04-09) - EntityFramework PDF
(2010-04-09) - EntityFramework PDF
NET
ADO NET
Entity Framework
Integración de Sistemas
Parte II. Diseño e implementación
ó de
aplicaciones Web con .NET
C t id
Contenido
Introducción
¿Por qué el Entity Framework?
Arquitectura y componentes
Proveedores específicos de EF
Obj
Object S i
Services ( SQL Linq
(eSQL, Li to Entities)
E ii )
Patrones en DDD
Relajación: IPOCO
Incluído en .NET Framework 3.5 SP1 y en VS2008 SP1 (11 de agosto de 2008)
Incluye un nuevo proveedor de ADO.NET, llamado Entity Client, que habliita el acceso a los
modelos conceptuales
Incluye
y dos componentes
p fundamentales:
Librería:
Físicamente, en el ensamblado System.Data.Entity.dll
Componentes de la arquitectura de EF
A i
Arquitectura y componentes
Arquitectura y componentes
Proveedores específicos de EF
Herramienta
H i t visual
i l iintegrada
t d ddentro
t d de VS 2008 que permite
it crear y editar
dit
modelos conceptuales
Componentes:
D t ll d
Detalles de mapeo: ver y editar
dit mapeos
El EDM d
designer
i opera sobre
b fificheros
h edmx.
d E
Estos
t fificheros
h (XML) están
tá
formados por tres secciones:
E
Encargado
d dde generar ell archivo
hi edmx
d
Permite
P it actualizar
t li ell modelo
d l EDM d
después
é dde que se h
hayan
realizado cambios en la BD
Arquitectura
q y componentes
p > Entity
y Data Model ((EDM))
Herencia
El M
Modelo
d l RRelacional
l i l no soporta
t di
directamente
t t ell concepto
t dde
herencia
La herencia se representa comúnmente en una base de datos de una de las tres
siguientes formas:
Mapeando una jerarquía entera de herencia a una sola tabla
Tabla por jerarquía,
jerarquía Table per Hierarchy (TPH)
Mediante una aproximación híbrida en la que se crea una tabla por cada clase concreta
(subclase) y en la que cada una de las tablas almacena la información común
Tabla por Clase Concreta (TPC)
Entity Client
E un nuevo proveedor
Es d d de ADO
ADO.NET
NET
El lenguaje utilizado para consultar los modelos de EDM se llama Entity SQL
(
(eSQL) )
Es una variante de los dialectos de SQL
Entity SQL
Ej consultar
Ej: lt ell número
ú d
de cuentas
t
//Entity SQL does not support the count(*) aggregate. Use count(0) instead.
command.CommandText =
"SELECT count(0) " +
"FROM MiniBankEntities.Account as t " +
"WHERE t.usrId = @usrId";
command.CommandType = CommandType.Text;
Arquitectura y componentes > Entity Client
Entity SQL
Ej consultar
Ej: lt ell número
ú d
de cuentas
t ((cont.)
t)
connection.Close();
}
Arquitectura y componentes > Entity Client
Entity SQL
E posible
Es ibl consultar
lt ell SQL generado
d
String generatedSQL = command.ToTraceString();
Entity Client
Con Entity
C E tit Client
Cli t y eSQL
SQL podemos
d cubrir
b i lla mayoría
í dde llas
necesidades de una capa de acceso a datos
Podemos consultar modelos conceptuales,
conceptuales de forma similar a cómo se
consultaban BD en ADO.NET 2.0
Object Services
Conjunto de clases que permiten consultar y obtener resultados en términos de objetos
Permite seguir los cambios en los entity objects y gestionar las relaciones entre ellos
Arquitectura y componentes
Object Services
Obj t Services
Object S i
EntityObject
ObjectContext
ObjectStateManager
Arquitectura y componentes
Object Services
Obj tC t t
ObjectContext
Permite trabajar con el modelo conceptual
Consultas: ObjectQuery;
Borrado: .DeleteObject
Persistencia: .SaveChanges();
Gestión de la conexión
ObjectStateManager
MergeOption
g p
Arquitectura y componentes
Object Services
Obj tSt t M
ObjectStateManager
int result =
context.CreateQuery<Account>(query, param).Count();
Console.WriteLine(result);
( );
}
Arquitectura y componentes
List<Account> accounts =
context.CreateQuery<Account>(query, param).
Execute(MergeOption NoTracking) Skip(startIndex)
Execute(MergeOption.NoTracking).Skip(startIndex).
Take(count).ToList();
Console.WriteLine(result);
}
Arquitectura y componentes
Cada entidad persistente tendrá su propio DAO, que extenderá el genérico para
añadir operaciones propias
El DAO genérico se encuentra en el proyecto ModelUtil, utilizado por MiniBank y
MiniPortal como .dll
La interfaz parametrizada del DAO genérico recibe 2 argumentos:
E, es la clase persistente para la que se implementará el DAO
E Update(E entity);
public
bli GenericDaoEntityFramework()
G i D E tit F k()
{
this.entityClass = typeof(E);
}
I l
Implementación
ió dde DAOs
DAO con Entity
E i Framework
F k
Implementación del DAO genérico con Entity Framework
[Dependency]
public ObjectContext Context
{
set
{
context = value;
entityContainerName = (context
(context.MetadataWorkspace.
MetadataWorkspace
GetItems<EntityContainer>(DataSpace.CSpace))[0].Name;
context.DefaultContainerName = entityContainerName;
// F
Forces th
the l
load
d of
f the
th metadata
t d t
context.MetadataWorkspace.LoadFromAssembly(
entityClass.Assembly);
}
get
{
return context;
}
}
I l
Implementación
ió dde DAOs
DAO con Entity
E i Framework
F k
Implementación del DAO genérico con Entity Framework
/* We assume that the DAO works only with single field primary
* key classes
*/
String primaryKeyFieldName =
((EntityType)entityType).KeyMembers.First().ToString();
return entityKey;
}
I l
Implementación
ió dde DAOs
DAO con Entity
E i Framework
F k
Implementación del DAO genérico con Entity Framework
Para implementar
P i l t lla persistencia
i t i utilizando
tili d Entity
E tit Framework,
F k ell DAO
necesita un objeto ObjectContext
Se asigna
g y recupera
p a través de la p
propiedad
p Context
Ej MiniBank
Ej.: Mi iB k > AccountDao
A tD
I l
Implementación
ió dde DAOs
DAO con Entity
E i Framework
F k
Ej MiniBank
Ej.: Mi iB k > AccountOperationDao
A tO ti D