19/04/2013
1
Entity Framework 6Jorge Bustos | [email protected], Servicios Profesionales [email protected] | www.danysoft.com 18.04.2013
Entity Framework 6¿Para qué sirve?
19/04/2013
2
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• Crear modelo en
diseñador• BD creada desde modelo• Clases auto-generadas
desde modelo
Code First (nueva BD)• Define clases y mapeo en
código• BD creada desde el modelo• Usar Migrations para cambiar
BD
D t b Fi t C d Fi t (BD i t t )Database First• Ingeniería inversa de BD a modelo• Clases auto-generadas
desde modelo
Code First (BD existente)• Usar herramientas de
ingeniería inversa• Mapeo y clases definidos en
código
19/04/2013
3
Ejemplo de modelo
Ejemplo de Code First
Fluent API
19/04/2013
4
Ejemplo de Code First
Clave
Relación
Convenciones
Atributos
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 SQLResultado: no hay que escribir sentencias SQL
19/04/2013
5
Ejemplito de código de EF
Guardar
Leer
Code First Migrations
Permiten aplicar los cambios de las clases CodeFirst 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 pueden personalizar para añadir otras p p p“artefactos” a la BD, sin utilizar T-SQL
19/04/2013
6
Ejemplo de Code First Migrations
Ejemplo de Code First Migrations
19/04/2013
7
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 deNormalmente 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 d h j t lt2. Tarda mucho en arrancar y en ejecutar consultas– 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 almacenados3. No puedo utilizar procedimientos almacenados– Mapeo de procedimientos de DB a funciones C# en el
modelo
– Mapeo de Update, Insert, Delete en modelo POCO
19/04/2013
8
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 U d t D t bModel y Update Database
– 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
caulquier tipo de relaciónq p
– 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
19/04/2013
9
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 de la lista por códigog p 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?
19/04/2013
10
Evolución de EF hasta EF 5 (beta y final)
.NET 3.5 SP1: primer EF
.NET 4.0: EF 4.0EF 4.1:
DbC t t C d Fi t Pl till d EDM DbC t t– DbContext, Code First, Plantilla de EDMs a DbContext
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 mejoras de rendimientocon valores de 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 5 yFuncionamiento asíncrono: async/await de 4.5, y SaveChangesAsync()
Mejoras de programación– Soporte de enum y datos espaciales en .NET 4
– “Resiliencia” de las conexiones (importante para ( p pservicios en la nube)
– Resolución de dependencias (Service Locator)
19/04/2013
11
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)E d f t– Esquema por defecto
– Añadir configuración (Fluent API) desde ensamblado– Servicios de pluralización de nombres personalizable
Mejoras de Code First– Convenciones personalizadasp– Servicios de pluralización de nombres personalizable– Mapeo de procedimientos INSERT/UPDATE/DELETE
a entidades
Y más novedades en EF 6Mejoras 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 por defecto = p
READ_COMMITED_SNAPSHOT– UseTransaction (trabajo con transacciones de DB activas)– BeginTransaction (permite elegir el nivel de aislamiento)
19/04/2013
12
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 personalizableservicio de pluralización personalizable
Extensión de VS: EF PowerTools(¡y no es la única!)
Menú contextual proyecto C#– Reverse Engineer Code Firstg
– Customize Reverse Engineer Code First (T4)
Menú contextual archivo C# con DbContext– View Entity Data Model (read-only)
– View Entity Data Model (XML)y ( )
– View Entity Data Model DDL
– Generate Views (también en menú contextual EDM)
19/04/2013
13
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 ServerSe supone que migrarán los de la 5
• EF 5: MySQL Connector, Oracle ODP.NET, PostgreSQL Npgsql, SQLite, Firebird, etc.
19/04/2013
14
http://www.danysoft.com/visualstudiow
ww
.dan
ysof
t.co
m