Está en la página 1de 14

19/04/2013

Entity Framework 6
Jorge Bustos  | j.bustos@danysoft.com, Servicios Profesionales
sp@danysoft.com |  www.danysoft.com 18.04.2013

Entity Framework 6
¿Para qué sirve?

1
19/04/2013

Entity Framework

Es una abstracción que representa un almacén de


datos (no sólo SQL Server o SQL Server CE)

El almacén de datos es un contexto que contiene


– Colecciones de objetos (representan filas de tablas)
– Relaciones entre objetos (propiedades de navegación)

Flujos de trabajo con EF

Model First Code First (nueva BD)


• Crear modelo en • Define clases y mapeo en
diseñador código
• BD creada desde modelo • BD creada desde el modelo
• Clases auto-generadas • Usar Migrations para cambiar
desde modelo BD
D t b
Database Fi t
First C d First
Code Fi t (BD existente)
i t t )
• Ingeniería inversa de BD • Usar herramientas de
a modelo ingeniería inversa
• Clases auto-generadas • Mapeo y clases definidos en
desde modelo código

2
19/04/2013

Ejemplo de modelo

Ejemplo de Code First

Fluent API

3
19/04/2013

Ejemplo de Code First

Clave

Relación
Atributos
Convencion
es

Trabajar con Entity Framework

Descargar paquete NuGet de EF


Crear modelo (EDM o Code First)
Instanciar el contexto (derivado del modelo)
Se trabaja con LINQ a Entidades
Llamar a SaveChanges

Resultado: no hay que escribir sentencias SQL

4
19/04/2013

Ejemplito de código de EF

Leer
Guardar

Code First Migrations

Permiten aplicar los cambios de las clases Code


First a la base de datos
Acepta Upgrade y Downgrade
Pueden ser manuales o automáticas (depende del
inicializador de BD)
Se puede usar migrate.exe
Desde EF6 se p pueden p personalizar ppara añadir otras
“artefactos” a la BD, sin utilizar T-SQL

5
19/04/2013

Ejemplo de Code First Migrations

Ejemplo de Code First Migrations

6
19/04/2013

Sincronizar BD con EDM

Update Model
Update Database

Al trabajar con modelos se pueden aplicar los


cambios a la BD
Los cambios de la DB pueden actualizar el modelo
Normalmente la BD de desarrollo no es la de
producción  Usar otras herramientas como SSDT o
la que se desee

Miedos a EF
1. No puedo ejecutar mis propias sentencias
– DbContext.SqlQuery/SqlQuery<T>
– Database.ExecuteSqlCommand
2 T
2. Tarda
d mucho h en arrancar y en ejecutar
j t consultas
lt
– generación de vistas más rápida
– vistas pregeneradas (con EF Power Tools)
– Mejora de cachés y otras optimizaciones de
consultas
3 No puedo utilizar procedimientos almacenados
3.
– Mapeo de procedimientos de DB a funciones C# en el
modelo
– Mapeo de Update, Insert, Delete en modelo POCO

7
19/04/2013

Más miedos a EF
4. Las consultas generadas no son óptimas
– Van mejorando
– Si la estructura de BD es demasiado compleja, usar
procedimientos
– Se pueden usar procedimientos almacenados
– La mayoría de las consultas son CRUD triviales
5. Difícil de coordinar el modelo con la BD
– Database First y Model First soportan Update from
M d l y Update
Model U d t Database
D t b
– POCO soporta migraciones manuales o automáticas

Y más miedos a EF

6. Falta de control sobre entidades relacionadas


– Se puede hacer un mapeo preciso con Fluent API de
q
caulquier tipo
p de relación
– Se soportan las acciones en cascada a nivel de
modelo y a nivel de BD
7. El modelo de programación es complejo
– En EF 4.0 se creó DbContext evitando complejidades
de ObjectContext
– POCO puede mantenerse con clases parciales e
ingeniería inversa

8
19/04/2013

Otro miedo:
Gestión de entidades relacionadas
La carga de entidades relacionadas soporta varias
modalidades:
– Carga diligente (eager loading)
• Carga hijos al cargar el padre
– Carga diferida (lazy loading)
• Carga hijos cuando va a accederse a ellos
– Carga explícita (explicit loading)
• Carga
g de la lista p
por código
g
– Consultas con proyecciones
• Carga con LINQ que proyecta hijos en una colección

Entity Framework
¿De dónde viene y a dónde va?

9
19/04/2013

Evolución de EF hasta EF 5 (beta y final)


.NET 3.5 SP1: primer EF
.NET 4.0: EF 4.0
EF 4.1:
– DbContext,
DbC t t Code
C d First,
Fi t Plantilla
Pl till d
de EDMs
EDM a DbContext
DbC t t
EF 4.2:
– Gestión de versiones
EF 4.3:
– Migraciones Code First
EF 5.0 (actualmente Beta2):
– Mapeo a enum, propiedades geográficas, soporte de funciones
con valores de tabla
tabla, mejoras de rendimiento
– VS 11: diagramas múltiples
EF 5 (final):
– Múltiples diagramas por BD
– Importación masiva de procedimientos almacenados a modelo

Novedades en EF 6

Mejoras de rendimiento
– Generación de vistas más rápida
– Funcionamiento asíncrono: async/await de 4
4.5,
5 y
SaveChangesAsync()

Mejoras de programación
– Soporte de enum y datos espaciales en .NET 4
– “Resiliencia” de las conexiones ((importante
p p
para
servicios en la nube)
– Resolución de dependencias (Service Locator)

10
19/04/2013

Más novedades en EF 6
Mejoras de configuración
– Configuración por código (de EF, no del modelo,
además de por archivo.config)
– Esquema
E por d
defecto
f t
– Añadir configuración (Fluent API) desde ensamblado
– Servicios de pluralización de nombres personalizable

Mejoras de Code First


– Convenciones personalizadas
p
– Servicios de pluralización de nombres personalizable
– Mapeo de procedimientos INSERT/UPDATE/DELETE
a entidades

Y más novedades en EF 6
Mejoras de migraciones
– Configuración de tabla de migraciones
– Operaciones de migración personalizadas

Mejoras de conexiones y transacciones


– Múltiples contextos por base de datos
– Contextos sobre conexiones ya abiertas

Mejoras de transacciones
– Nivel de aislamiento p
por defecto =
READ_COMMITED_SNAPSHOT
– UseTransaction (trabajo con transacciones de DB activas)
– BeginTransaction (permite elegir el nivel de aislamiento)

11
19/04/2013

Ahora EF es Open Source

EF es Open Source

Se puede contribuir al código.

Por ej. Unai Zorrilla ha contribuido con:


– carga de configuraciones de ensamblado
– servicio de pluralización personalizable

Extensión de VS: EF PowerTools


(¡y no es la única!)
Menú contextual proyecto C#
– Reverse Engineer
g Code First
– Customize Reverse Engineer Code First (T4)

Menú contextual archivo C# con DbContext


– View Entity Data Model (read-only)
– View Entityy Data Model ((XML))
– View Entity Data Model DDL
– Generate Views (también en menú contextual EDM)

12
19/04/2013

Demo

• Hacer un Code First con ingeniería inversa


con “EntityFramework Reverse POCO Code
First Generator”
– Pre-generar vistas
– Mostrar el modelo
– Mostrar el DDL de SQL del modelo

Entity Framework Providers

Por supuesto: SQL Server y SQL Server CE


• EF 6 (todavía en alpha): DevArt dotConnect:
Oracle, MySQL, PostgreSQL, SQLite, SalesForce,
SQL Server
Se supone que migrarán los de la 5
• EF 5: MySQL Connector, Oracle ODP.NET,
PostgreSQL Npgsql, SQLite, Firebird, etc.

13
19/04/2013

www.danysoft.com http://www.danysoft.com/visualstudio

14

También podría gustarte