NET
ADO
NET
Entity Framework
Integracin de Sistemas
Parte II. Diseo e implementacin
de
aplicaciones Web con .NET
C t id
Contenido
Introduccin
Qu es el ADO.NET Entity
y Framework?
Arquitectura y componentes
Proveedores especficos de EF
Obj
Object
S i
Services
( SQL Linq
(eSQL,
Li to Entities)
E ii )
Introduccin
D
Desajuste
j t d
de iimpedancias
d
i (i
(impedance
d
mismach)
i
h)
Patrones en DDD
Introduccin
I
Ignorancia
i de
d lla persistencia
i t
i (P
(Persistence
i t
I
Ignorance)
)
Relajacin: IPOCO
Introduccin
Includo 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:
Librera:
A i
Arquitectura
y componentes
Componentes de la arquitectura de EF
A i
Arquitectura
y componentes
Arquitectura y componentes
Proveedores especficos de EF
Fabricante
Provider para
Devart (CoreLab)
IBM
MySQL AB
MySQL
Npgsql
PostgreSQL 7.3+
7 3+ y 8.x
8x
OpenLink
Phoenix
SQLite Database
Sybase
SQL Anywhere
Vista DB
VistaDB databases
Datadirect Tech.
Firebird
Firebird databases
Arquitectura y componentes
El modelo
d l d
de d
datos
t b
basado
d en entidades
tid d permite
it
2.
3.
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Herramienta
H
i t visual
i
l iintegrada
t
d d
dentro
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
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
El EDM d
designer
i
opera sobre
b fificheros
h
edmx.
d
E
Estos
t fificheros
h
(XML) estn
t
formados por tres secciones:
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
E
Encargado
d d
de generar ell archivo
hi edmx
d
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Arquitectura
q
y componentes
p
> Entity
y Data Model ((EDM))
Permite
P
it actualizar
t li
ell modelo
d l EDM d
despus
d
de 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 R
Relacional
l i
l no soporta
t di
directamente
t
t ell concepto
t d
de
herencia
Mediante una aproximacin hbrida en la que se crea una tabla por cada clase concreta
(subclase) y en la que cada una de las tablas almacena la informacin comn
Arquitectura y componentes
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)
)
Entity SQL
Ej consultar
Ej:
lt ell nmero
d
de cuentas
t
String connectionString = ConfigurationManager.
ConnectionStrings["MiniBankEntities"]
ConnectionStrings[
MiniBankEntities ].ToString();
ToString();
Int64 userId = 1234;
using (EntityConnection connection =
new EntityConnection(connectionString))
{
connection.Open();
EntityCommand command = connection.CreateCommand();
//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;
Entity SQL
Ej consultar
Ej:
lt ell nmero
d
de cuentas
t ((cont.)
t)
Entity SQL
E posible
Es
ibl consultar
lt ell SQL generado
d
String generatedSQL = command.ToTraceString();
Arquitectura y componentes
Entity Client
Con Entity
C
E tit Client
Cli t y eSQL
SQL podemos
d
cubrir
b i lla mayora
d
de llas
necesidades de una capa de acceso a datos
Arquitectura y componentes
Object Services
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
Consultas: ObjectQuery;
Borrado: .DeleteObject
Persistencia: .SaveChanges();
Gestin de la conexin
.Attach(..), .Dettach(..)
ObjectStateManager
MergeOption
g p
Arquitectura y componentes
Object Services
Obj tSt t M
ObjectStateManager
Al aplicar ObjectContext.SaveChanges()
ObjectContext SaveChanges() en Added,
Added Changed,
Changed cambia a
Unchanged
Arquitectura y componentes
Ej consultar
Ej:
lt ell nmero
d
de cuentas
t
using (MiniBankEntities context = new MiniBankEntities())
{
String query = "SELECT VALUE account " +
"FROM Account " +
"WHERE account.usrId = @userId";
ObjectParameter param = new ObjectParameter("userId", userId);
int result =
context.CreateQuery<Account>(query, param).Count();
Console.WriteLine(result);
(
);
}
Arquitectura y componentes
Ej recuperar las
Ej:
l cuentas
t d
de un usuario
i (i
(implementando
l
t d P
Page-by-Page)
b P
)
using (MiniBankEntities context = new MiniBankEntities())
{
String
i
query = "SELECT
"
value
l
account " +
"FROM Account " +
"WHERE account.usrId = @userId " +
"ORDER BY account.accId";
ObjectParameter param = new ObjectParameter("userId", userId);
List<Account> accounts =
context.CreateQuery<Account>(query, param).
Execute(MergeOption NoTracking) Skip(startIndex)
Execute(MergeOption.NoTracking).Skip(startIndex).
Take(count).ToList();
foreach (Account a in accounts)
{
C
Console.WriteLine(a.accId
l W it Li (
Id + ",
" " + a.balance);
b l
)
}
}
Arquitectura y componentes
Ej consultar
Ej:
lt ell nmero
d
de cuentas
t
using (MiniBankEntities context = new MiniBankEntities())
{
int result =
(from acc in context.Account
where acc.usrId == userId
select acc).Count();
Console.WriteLine(result);
}
Arquitectura y componentes
Ej recuperar las
Ej:
l cuentas
t d
de un usuario
i (i
(implementando
l
t d P
Page-by-Page)
b P
)
using (MiniBankEntities context = new MiniBankEntities())
{
List<Account> accounts =
(from a in context.Account
where a.usrId == userId
orderby a.accId
)
p(
)
(
)
()
select a).Skip(startIndex).Take(count).ToList();
foreach (Account a in accounts)
{
Console.WriteLine(a.accId + ", " + a.balance);
}
}
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
Cada entidad persistente tendr su propio DAO, que extender el genrico para
aadir operaciones propias
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
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 travs de la p
propiedad
p
Context
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
Ej MiniBank
Ej.:
Mi iB k > AccountDao
A
tD
I l
Implementacin
i d
de DAOs
DAO con Entity
E i Framework
F
k
Ej MiniBank
Ej.:
Mi iB k > AccountOperationDao
A
tO
ti D