Entity Framework 6 ¿Para qué sirve?

Anuncio
19/04/2013
Entity Framework 6
Jorge Bustos | [email protected], Servicios Profesionales
[email protected] | 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)
D t b
Database
Fi t
First
C d First
Code
Fi t (BD existente)
i t t )
• 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
• Ingeniería inversa de BD
a modelo
• Clases auto-generadas
desde modelo
• Usar herramientas de
ingeniería inversa
• Mapeo y clases definidos en
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
pueden p
personalizar p
para añadir otras
Desde EF6 se p
“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
tipo
p de relación
caulquier
– 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
Descargar