ado net entity framework

24
{ { ADO.Net ADO.Net Entities Entities Framework Framework } } {Carlos Chávez V. } Arquitecto de Software [email protected] http://blogs.comunidadesandinas.com/blogs/cchavez/ [email protected] Evolucion de Acceso a Datos

Upload: mascodigo

Post on 07-Aug-2015

4.735 views

Category:

Technology


2 download

TRANSCRIPT

{{ADO.Net Entities ADO.Net Entities FrameworkFramework}}

{Carlos Chávez V. }Arquitecto de [email protected]://blogs.comunidadesandinas.com/blogs/cchavez/[email protected]

Evolucion de Acceso a Datos

AgendaAgenda

•Escenarios Actuales

OR/M OR/M•

• ADO.Net Entities Framework

•LinQ to Entities

Escenario Usuales

{{ADO.Net Entities ADO.Net Entities FrameworkFramework}}

Beta 3Beta 3

Más allá del modelo relacional

¿Qué es ADO.NET: Entity Framework?

• Es un OR/M de Microsoft para la tecnología .Net

• Actualmente en Beta3

¿Qué es un OR/M?• Object Relational / Mapping• Resolver la impedancia entre el desencuentro de un modelo de datos relacional y

un modelo conceptual OO y los procesos asociados.• Evitar la implementación de una capa de acceso a datos (DAOs), mapeado, o

incluso genera el modelo conceptual (DTOs) • Recomendable en aplicaciones empresariales

Abstracción

{ADO.Net Entities Framework}{ADO.Net Entities Framework}

Escenario IdealDiseño Conceptual

(Entidades & Relaciones)Clientes Cuenta

Servicio

poseeposee

manejamaneja

Aplicacion(Entidades & Relaciones)

{ADO.Net Entities Framework}{ADO.Net Entities Framework}

Escenario Actual

Aplicación(Entidades & Relaciones)

Esquema Relacional(normalización, tablas, keys)

SP's

Views

Fn's

Mapeo LogicoConceptual<->Relacional

Aplicación(Entidades& Relaciones)

SP's

Views

Fn's

Mapeo LogicoConceptual<->Relacional

Aplicacion(Entidades & Relaciones)

SP's

Views

Fn's

Mapeo LogicoConceptual<->Relacional

{ADO.Net Entities Framework}{ADO.Net Entities Framework}

Arquitectura

Base de Datos relacionalBase de Datos relacional

Soporte para consultas vía LINQ denominado LINQ to EntitiesSoporte para consultas vía LINQ denominado LINQ to Entities

Un modelo de objetos para acceder a la capa conceptualUn modelo de objetos para acceder a la capa conceptual

Un objeto para generar consultas dentro del modelo Object ServicesUn objeto para generar consultas dentro del modelo Object Services

Lenguaje denominado eSQL o Entity SQL semejante a SQL pero con capacidades adicionales

Lenguaje denominado eSQL o Entity SQL semejante a SQL pero con capacidades adicionales

Niveles de abstracciónNiveles de abstracción

Nivel conceptual descrito por un lenguaje denominado Conceptual Schema Definition Language (CSDL)

Nivel conceptual descrito por un lenguaje denominado Conceptual Schema Definition Language (CSDL)Un lenguaje de mapeado de esquema lógico a esquema conceptual (MSL)Un lenguaje de mapeado de esquema lógico a esquema conceptual (MSL)

Nivel Lógico descrito por un lenguaje denominado Store Schema Definition Language (SSDL)

Nivel Lógico descrito por un lenguaje denominado Store Schema Definition Language (SSDL)

Proveedor de acceso a datos semejante a SqlClientProveedor de acceso a datos semejante a SqlClient

{ADO.Net Entities Framework}{ADO.Net Entities Framework}

Entity Data Model

ClasesOO

ClasesOO

Entity Data Model

Schema

Database Objects Schema

C-SMSLC-SMSL

SSDLSSDLCSDLCSDL

Presentación(Forms/Reports)Presentación(Forms/Reports) Clases

OOClases

OO

Modelo Conceptual Modelo LógicoMap

Base de Datos Relacional

Servicios

Mapeado: Características• Relacionar los datos del almacén hasta las clases del

modelo conceptual• Tipos complejos • Procedimientos almacenados y Vistas• Entidad simple a varias tablas• Múltiple EntitySets por Tipo (MEST)• Herencia:

– Tabla por jerarquía (Table per Hierarchy) TPH– Tabla por tipo concreto (Table per Type) TPT– Tabla por subclase (Table per Subclass) or TPS

Modelo Conceptual en EF• Clases prescriptivas

– Structural Object > EntityObject – Gestión de identidad (EntityKey)– Gestión de cambios (TrackingEntity event)– Soporte para relaciones (EntityCollection)– Estado (EntityState)– Son clases parciales

Object Context• Clase derivada (generada) de ObjectContext• Tipado Fuerte: Manipulación del Modelo Conceptual

– Consultas/Recuperación: Blogs: ObjectQuery;– Inserciones: .AddToBlog(Blog b); .AddObject(…), – Borrado: .DeleteObject– Persistencia: .SaveChanges();

• Gestión de la conexión• Metadata (a partir de CSDL)• Almacen o caché en memoria de objetos• Tracking de estado objetos:

– .Attach(..), .Dettach(..) – ObjectStateManager– MergeOption

ObjectStateManager• Seguimiento del estado de entidades• Gestiona entradas EntityStateEntry para cada Entidad en almacen en

memoria.– Cuando se cargan (Query, Attach): Unchanged– Cuando se crean (AddObject): Added– Cuando se modifican: Changed– Cuando se borran: Deleted– Cuando se destruye el ObjectContext: Detached– Al aplicar ObjectContext.SaveChanges() en Added, Changed, cambia a

Unchanged.

Almacen: SGBDs soportados• SQL Server (2005/2008)Fabricante Provider para

CoreLab Oracle, MySQL, PostgreSQL, SQLite

IBM DB2, Informix Dynamic Server

MySQL AB MySQL

Npgsql PostgreSQL 7.3+ y 8.x

OpenLink Oracle, Ingres, Informix, Sybase, MySQL, PostgreSQL, DB2, Progress, SQL Sever, (cq. Datasource OpenLink ODBC o bridge JDBC)

Phoenix SQLite Database

Sybase SQL Anywhere

Vista DB VistaDB databases

Datadirect Tech. Orable, Sybase, SQL Server, DB2…

Firebird Firebird databases

{{ADO.Net Entities FrameworkADO.Net Entities Framework}}

{{LinQLinQ}}Datos == Objetos

{LinQ}{LinQ}

Impedancia de Datos

Datos Datos !=!= Objetos Objetos

AdventureWorks db = new AdventureWorks();AdventureWorks db = new AdventureWorks(); Query<SalesPerson> newSalesPeople = Query<SalesPerson> newSalesPeople =

db.GetQuery<SalesPersondb.GetQuery<SalesPerson>(@”>(@” SELECT VALUE sp SELECT VALUE sp

FROM SalesPeople AS spFROM SalesPeople AS sp WHERE sp.HireDate > @Date"WHERE sp.HireDate > @Date",,

new QueryParameter(“Date", hireDate));new QueryParameter(“Date", hireDate));  foreach(SalesPerson p in newSalesPeople) {foreach(SalesPerson p in newSalesPeople) { Console.WriteLine("{0}\t{1}", p.FirstName, Console.WriteLine("{0}\t{1}", p.FirstName, p.LastName); p.LastName); }}

Otros…VBC#

Base de Datos RelacionalBase de Datos Relacional

No hay No hay intellisence intellisence

Argumento Argumento debilmente debilmente enlazadosenlazados

No hay No hay validación en validación en

tiempo de tiempo de compilacióncompilación

Others…VBC#

.NET Language-Integrated Query (LINQ)

LINQ enabled data sourcesLINQ enabled data sourcesLINQ enabled ADO.NETLINQ enabled ADO.NET

LINQTo Datasets

LINQTo SQL

LINQTo Entities

LINQTo XML

LINQTo Objects

ObjectsObjects

<book> <title/>

<author/> <price/>

</book>

XMLXMLRelatioRelationalnal

{{LinQ to EntitiesLinQ to Entities}}

Recursos• MSDN: Entity Framework BETA3

– http://msdn2.microsoft.com/en-us/library/bb739441.aspx

• Blog de ADO.NET– http://blogs.msdn.com/adonet/

• MUGLIMA– www.muglima.com

• Blogs en castellano– Carlos Chávez Blog - http://geeks.ms/blogs/cchavez/