570 likes | 1.34k Views
Entity Framework. Sonora.Net – Ernesto Ibarra. 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 ? Implementación Básica de Entity Framework
E N D
Entity Framework Sonora.Net – Ernesto Ibarra
Temario • QueesEntity Framework y suscomponentes? • Quees un ORM? • Principales ORM del Mercado • Quees un EntityObject? • Quees un POCO Object? • QueesLinq? • Implementación Básicade Entity Framework • Ventajas y desventajas de usar Entity Framework • Consideraciones para Performance • Preguntas?
Quees Entity Framework? • Entity Framework (EF) es un ORM (object-relationalmapper) que permite a los desarrolladores en .NET trabajar con datos relacionales usando objetos específicos del dominio. Elimina la necesidad de escribir la mayoría de código 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.NetData Provider
Quees un ORM? Object-Relational Mapping • Mapeo objeto-relacional(más conocido por su nombre en inglés, Object-Relationalmapping, o sus siglas O/RM, ORM, y O/R mapping) es una técnica de programación para convertir datos entre el sistema de tiposutilizado en un lenguaje de programaciónorientado a objetos y la utilización de una base de datos relacional, utilizando un motor de persistencia. • Nota: En la práctica esto crea una base de datos orientada a objetos virtual, sobre la base de datos relacional. Esto posibilita el uso de las características propias de la orientación a objetos (básicamente 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
Quees un Entity Object? • Por default el Entity Data Model genera EntityObjectsque son derivados de entidades (tablas/vistas)
Quees un POCO Object? • POCO (Plain Old CLR Object): - Las clases POCO esunaclase la cual no depende de ningunaclase base de un Framework especifico.
QueesLinq? • Definición: Languaje Integrated Query • Linq simplemente es una expresión tipo Query en nuestro código, 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 Linq: • Fácil: List<Customer> customers = from c in Customers wherec.FirstName ==“Test” select c; • Rápido de codificar y legible: List<Customer> customers = dbContext.Customers.Where(c => c.FirstName == “Test”).ToList();
Linq vs Native SQL • Ventajas: • No hay cadenas mágicas como las que se pueden generar en sentencias SQL (Prevención de Inyección). • Intellisense. • Un desarrollo mas rápido. • Autogeneración de objetos de dominio que pueden ser proyectos reusables. • Lazyloading.(Cargado de objetos relacionados sobre demanda) • Lambda expressions y extensionmethods.
Linq vs Native SQL • Desventajas: • Depuración (Debugging). • Consultas complejas traen como resultado problemas de rendimiento. • Sobrecarga al crear consultas. • Los Índices de base de datos no son usados adecuadamente.
Estilos a seguir en Entity Framework • Code First • Model First • Database first
ImplementacionBasica de EF • Demostración
Consideraciones para Performance • Múltiples EntityModels (múltiples contextos). • Desactivar el trackeo si no es necesario (Mejora el rendimiento): SubwayDBcontext = newSubwayDB(); context.Configuration.AutoDetectChangesEnabled = false; // Do bulk insert ....... // Change it back context.Configuration.AutoDetectChangesEnabled = true; • Usar SQL Projection: varusers = from u incontext.UserAccountswhereu.Active == true selectnew { FirstName = u.FirstName, LastName = u.LastName, Email = u.Email };
Consideraciones para Performance • Usar el tipo de coleccion apropiado: IQueryable<UserAccount> IEnumerable<UserAccount> - Filtradesde la base de datos - Filtradesde el lado del cliente - SoportaLazy loading - No soporta Lazy loading. • Usar Queries compilados: • Aplicar a los Queries comunmenteutilizados para mejorar el rendimiento (Performance). • Usar Paginados de información del lado del servidor: intpageSize=10,startingPageIndex=2; varusers = context.UserAccounts.Take(pageSize).Skip(startingPageIndex * pageSize) .ToList();
Consideraciones para Performance • Caching: - Caching Interno • Rápida ejecución estilo Micro-ORM estilo SqlQuery en base de datos y ExecuteStoreQuery (SP): varquery = 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 Eagerloading (Cuando seleccionar Lazyloading)
Consideraciones para Performance • Evitar el uso del método Contains En Linq, el método Contains es usado para verificar la existencia de un valor. Este es convertido a una sentencia “WHERE IN” en SQL, lo cual causa una degradación del performance. • Depuración y Optimización de LinqQuery: - Usar SQL Profiler - Dividir la consulta a múltiples consultas (múltiples sentencias JOIN a tablas) • Estrategias para manejo de Herencia en Entity Framework: - Jerarquía por Tabla (TPH) - Tabla por Tipo (TPT) - Tabla por Clase concreta (TPC):
Consideraciones para Performance • Jerarquía por Tabla (TPH) - Permite polimorfismo por de-normalización de esquema de SQL y utiliza una columna como tipo discriminador que contiene esta información. Discriminador = 3 Tipos
Consideraciones para Performance • Tabla por Tipo (TPT) - Representa una relación tipo “is a” (herencia), como una relación tipo “has a” (Foreignkey).
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 • PluralSightOnline Trainings: http://pluralsight.com/training/Courses/TableOfContents/entity-framework5-getting-started • Entity framework: MostafaDarwiche