04 - Entity Framework 6 - danysoft.com 6.pdf · 19/04/2013 2 Entity Framework Es una abstracción...

Post on 02-Jul-2018

225 views 0 download

Transcript of 04 - Entity Framework 6 - danysoft.com 6.pdf · 19/04/2013 2 Entity Framework Es una abstracción...

19/04/2013

1

Entity Framework 6Jorge Bustos  | j.bustos@danysoft.com, Servicios Profesionales sp@danysoft.com |  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