Temario Que es Entity Framework y sus componentes? Que es un ORM? Principales ORM del Mercado Que es un EntityObject? Que es un POCO Object? Que es Linq? Implementacin Bsica de Entity Framework Ventajas y desventajas de usar Entity Framework Consideraciones para Performance Preguntas? Que es Entity Framework? Entity Framework (EF) es un ORM (object- relational mapper) que permite a los desarrolladores en .NET trabajar con datos relacionales usando objetos especficos del dominio. Elimina la necesidad de escribir la mayora de cdigo de acceso a datos. Es un mecanismo automatizado para acceder y consultar datos en una base de datos y trabajar con los resultados.
Componentes de Entity Framework EDM (Entity Data Model) Conceptual Model Storage Model Mapping LINQ to Entities Entity SQL Object Service Entity Client Data Provider ADO.Net Data Provider
Que es un ORM? Object-Relational Mapping
Mapeo objeto-relacional (ms conocido por su nombre en ingls, Object- Relational mapping, o sus siglas O/RM, ORM, y O/R mapping) es una tcnica de programacin para convertir datos entre el sistema de tipos utilizado en un lenguaje de programacin orientado a objetos y la utilizacin de una base de datos relacional, utilizando un motor de persistencia.
Nota: En la prctica esto crea una base de datos orientada a objetos virtual, sobre la base de datos relacional. Esto posibilita el uso de las caractersticas propias de la orientacin a objetos (bsicamente herencia y polimorfismo) Principales ORM del Mercado Java: EJB, Hibernate, Athena Framework, Java Data Objects. .NET: ADO.NET Entity Framework, Linq to SQL, nHibernate, DataObjects.NET. PHP: CakePHP, FuelPHP, Qcodo, Readbean, Zend Framework Phyton: Django, SQLObject, Storm, Tryton. Ruby: ActiveRecord, Datamapper, iBATIS Que es un Entity Object? Por default el Entity Data Model genera EntityObjects que son derivados de entidades (tablas/vistas) Que es un POCO Object? POCO (Plain Old CLR Object): - Las clases POCO es una clase la cual no depende de ninguna clase base de un Framework especifico. Que es Linq? Definicin: Languaje Integrated Query
Linq simplemente es una expresin tipo Query en nuestro cdigo, similar a un Query de SQL en nuestra base de datos. Es aplicable sobre colecciones: Listas Arreglos XML Tablas de base de datos Acceso a datos con ADO.NET Acceso a datos con Linq: Fcil: List<Customer> customers = from c in Customers where c.FirstName == Test select c;
Rpido de codificar y legible: List<Customer> customers = dbContext.Customers.Where(c => c.FirstName == Test).ToList(); Linq vs Native SQL Ventajas: 1. No hay cadenas mgicas como las que se pueden generar en sentencias SQL (Prevencin de Inyeccin). 2. Intellisense. 3. Un desarrollo mas rpido. 4. Autogeneracin de objetos de dominio que pueden ser proyectos reusables. 5. Lazy loading.(Cargado de objetos relacionados sobre demanda) 6. Lambda expressions y extension methods. Linq vs Native SQL Desventajas: 1. Depuracin (Debugging). 2. Consultas complejas traen como resultado problemas de rendimiento. 3. Sobrecarga al crear consultas. 4. Los ndices de base de datos no son usados adecuadamente. Estilos a seguir en Entity Framework Code First Model First Database first
Implementacion Basica de EF Demostracin Consideraciones para Performance
Mltiples Entity Models (mltiples contextos). Desactivar el trackeo si no es necesario (Mejora el rendimiento): SubwayDB context = new SubwayDB(); context.Configuration.AutoDetectChangesEnabled = false; // Do bulk insert ....... // Change it back context.Configuration.AutoDetectChangesEnabled = true; Usar SQL Projection: var users = from u in context.UserAccounts where u.Active == true select new { FirstName = u.FirstName, LastName = u.LastName, Email = u.Email }; Consideraciones para Performance
Usar el tipo de coleccion apropiado: IQueryable<UserAccount> IEnumerable<UserAccount> - Filtra desde la base de datos - Filtra desde el lado del cliente - Soporta Lazy loading - No soporta Lazy loading.
Usar Queries compilados: - Aplicar a los Queries comunmente utilizados para mejorar el rendimiento (Performance).
Usar Paginados de informacin del lado del servidor: int pageSize=10,startingPageIndex=2; var users = context.UserAccounts.Take(pageSize).Skip(startingPageIndex * pageSize) .ToList(); Consideraciones para Performance
Caching: - Caching Interno Rpida ejecucin estilo Micro-ORM estilo Sql Query en base de datos y ExecuteStoreQuery (SP): var query = ContextManager.CurrentContext.Database.SqlQuery<TransactionObjectList>( "EXEC sp_GetTransactionList @RoleID, @UserID, @RegionID, @Lookup, @TransactionsStatus, @DateFrom, @DateTo, " + "@AmountFrom, @AmountTo, @DeliveryMethod, @AdminMenu, @StoreNumber, @HasDiscount, @CateringMenu, " + "@DevelopmentStores, @WithCustomerAbuse, @WithTotalPrice, @minGrandTotal, @maxGrandTotal, @EnteredToSubshop, " + "@ExcludeZeroBalance, @StoreIsRemoved, @marketID, @Page,@PageSize,@sortdir,@sort", sqlparameters); Lazy Vs Eager loading (Cuando seleccionar Lazy loading) Consideraciones para Performance
Evitar el uso del mtodo Contains En Linq, el mtodo Contains es usado para verificar la existencia de un valor. Este es convertido a una sentencia WHERE IN en SQL, lo cual causa una degradacin del performance. Depuracin y Optimizacin de Linq Query: - Usar SQL Profiler - Dividir la consulta a mltiples consultas (mltiples sentencias JOIN a tablas) Estrategias para manejo de Herencia en Entity Framework: - Jerarqua por Tabla (TPH) - Tabla por Tipo (TPT) - Tabla por Clase concreta (TPC): Consideraciones para Performance
Jerarqua por Tabla (TPH) - Permite polimorfismo por de-normalizacin de esquema de SQL y utiliza una columna como tipo discriminador que contiene esta informacin. Discriminador = 3 Tipos Consideraciones para Performance
Tabla por Tipo (TPT) - Representa una relacin tipo is a (herencia), como una relacin tipo has a (Foreign key). Consideraciones para Performance
Tabla por Clase Concreta (TPC) - Descarga las relaciones de polimorfismo y herencia completamente desde el esquema SQL. Referencias: ADO.NET Entity Framework: http://msdn.microsoft.com/es-es/library/vstudio/bb399572%28v=vs.100%29.aspx Entity Framework Tutorial: http://www.entityframeworktutorial.net/EntityFramework4.3/Introduction.aspx PluralSight Online Trainings: http://pluralsight.com/training/Courses/TableOfContents/entity-framework5- getting-started Entity framework: Mostafa Darwiche