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
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 Database First Code First (BD existente) t Ingeniería inversa de BD Usar herramientas de a modelo ingeniería inversa Clases auto-generadas desde modelo Mapeo y clases definidos en código 2
Ejemplo de modelo Ejemplo de Code First Fluent API 3
Ejemplo de Code First Clave Atributos Convencion es Relación 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
Ejemplito de código de EF Guardar Leer 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 pueden personalizar para añadir otras artefactos a la BD, sin utilizar T-SQL 5
Ejemplo de Code First Migrations Ejemplo de Code First Migrations 6
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. 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 almacenados Mapeo de procedimientos de DB a funciones C# en el modelo Mapeo de Update, Insert, Delete en modelo POCO 7
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 Model 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ó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
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ódigo 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
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, t Code First, Plantilla de EDMs a DbContext 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, 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, y SaveChangesAsync() Mejoras de programación Soporte de enum y datos espaciales en.net 4 Resiliencia de las conexiones (importante para servicios en la nube) Resolución de dependencias (Service Locator) 10
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 por defecto Añadir configuración (Fluent API) desde ensamblado Servicios de pluralización de nombres personalizable Mejoras de Code First Convenciones personalizadas 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 por defecto = READ_COMMITED_SNAPSHOT UseTransaction (trabajo con transacciones de DB activas) BeginTransaction (permite elegir el nivel de aislamiento) 11
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 Code First Customize Reverse Engineer Code First (T4) Menú contextual archivo C# con DbContext View Entity Data Model (read-only) View Entity Data Model (XML) View Entity Data Model DDL Generate Views (también en menú contextual EDM) 12
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
http://www.danysoft.com/visualstudio www.danysoft.com 14