Enfoques Del Entity Framework Paper Majo

10
ENFOQUES DEL ENTITY FRAMEWORK INGENIERÍA DE SISTEMAS PROYECTOS 1 PRESENTADO POR: MARÍA JOSÉ CHÁVEZ ESTRADA Cajamarca, Abril Del 2012 DOCENTE: ING. SAMUEL MESTANZA ALCÁNTARA

Transcript of Enfoques Del Entity Framework Paper Majo

Page 1: Enfoques Del Entity Framework Paper Majo

ENFOQUES DEL ENTITY FRAMEWORK

INGENIERÍA DE SISTEMAS

PROYECTOS 1

PRESENTADO POR: MARÍA JOSÉ CHÁVEZ ESTRADA

Cajamarca, Abril Del 2012

DOCENTE: ING. SAMUEL MESTANZA ALCÁNTARA

Page 2: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

1

Enfoques del Entity Framework

María José Chávez Estrada

e-mail: [email protected]

[email protected]

RESUMEN: En este documento se hablará acerca de

los enfoques del Entity Framework 4, ofreciendo una

visión general de estos enfoques de desarrollo. Con

Entity Framework podemos generar un modelo

conceptual desde tres enfoques distintos: a partir de

base de datos existente (llamado enfoque database-

first), partiendo desde cero, comenzando con un modelo

vacío (enfoque model-first) o utilizando entidades POCO

que es llamado enfoque code-first.

PALABRAS CLAVE: Entity Framework, Database-

First, Model-First, Code-Firs.

1 ¿Qué es Entity Framework?

Entity Framework es una tecnología desarrollada

por Microsoft, que a través de ADO.NET genera un

conjunto de objetos que están directamente

ligados a una Base de Datos, permitiendo a los

desarrolladores manejar dichos objetos en lugar de

utilizar lenguaje SQL contra la Base de Datos.

Los arquitectos y programadores de aplicaciones

orientadas a datos se han enfrentado a la

necesidad de lograr dos objetivos muy

diferentes. Deben modelar las entidades, las

relaciones y la lógica de los problemas

empresariales que resuelven, y también deben

trabajar con los motores de datos que se usan

para almacenar y recuperar los datos. Los datos

pueden abarcar varios sistemas de

almacenamiento, cada uno con sus propios

protocolos; incluso las aplicaciones que funcionan

con un único sistema de almacenamiento deben

equilibrar los requisitos del sistema de

almacenamiento con respecto a los requisitos de

escribir un código de aplicación eficaz y fácil de

mantener.

Entity Framework permite a los programadores

trabajar con datos en forma de objetos y

propiedades específicos del dominio, por ejemplo,

con clientes y direcciones, sin tener que pensar en

las tablas de las bases de datos subyacentes y en

las columnas en las que se almacenan estos

datos. Con Entity Framework, los desarrolladores

de software pueden trabajar en un nivel más alto

de abstracción cuando tratan con datos, y puede

crear y mantener aplicaciones orientadas a datos

con menos código que en las aplicaciones

tradicionales. Dado que Entity Framework es un

componente de .NET Framework, las aplicaciones

de Entity Framework se pueden ejecutar en

cualquier equipo en el que esté instalado .NET

Framework a partir de la versión 3.5 SP1.

Actualmente con Entity Framework podemos elegir

entre 3 enfoques diferentes para crear el modelo

conceptual y resolver nuestras necesidades de

persistencia:

Page 3: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

2

Database First: El modelo conceptual se

crea a partir de una base de datos

existente.

Model First: se crea el modelo conceptual

y se genera la base de datos.

Code First: nuevo a partir de EF 4.1. Un

enfoque simplificado que permite mapear

nuestras clases POCO a la base de datos

usando convención, Data Annotations o

Fluent API.

2 DATABASE FIRST

Este enfoque permite inferir un modelo de clases a

partir del esquema de una base de datos existente.

Usando Visual Studio, podemos agregar un ítem

de proyecto llamado Entity Data Model e iniciar un

asistente para conectarnos a una base de datos,

seleccionar los objetos que queremos incluir en el

modelo (tablas, vistas, stored procedures) y

generar un archivo .edmx que contiene una

representación XML de:

El modelo conceptual (CSDL – Conceptual

Schema Definition Language)

el modelo de datos (SSDL – Store Schema

Definition Language)

y el mapeo entre ambos modelos (MSL –

Mapping Specification Language)

El siguiente gráfico muestra un ejemplo del

contenido XML de un archivo .edmx:

Es importante entender que el modelo

conceptual (CSDL) no debe ser necesariamente

igual al modelo de datos (SSDL), y por ello existe

el modelo de mapeo (MSL).

A partir de ese archivo .edmx, se genera

automáticamente un archivo

.edmx.designer.cs (.vb en el caso de VB.NET) que

contiene las clases que representan a las

entidades del modelo conceptual.

Page 4: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

3

Puede observarse que estas clases heredan

de EntityObject y tienen varios atributos y

propiedades dependientes de Entity Framework.

Típicamente, se crea una clase (entidad) por cada

tabla de la base de datos, incluyendo propiedades

que se mapean a campos y las relaciones entre

las tablas son representadas

mediante propiedades de navegación.

Además de las clases de entidades se genera

también una clase que hereda de ObjectContext y

representa el contexto de base de datos. A través

de esta clase tendremos acceso a las entidades y

colecciones del modelo y podremos realizar todas

las operaciones de lectura y escritura de datos

desde y hacia la base de datos subyacente.

En el siguiente ejemplo, BookstoreEntities es la

clase generada por EF que hereda

deObjectContext:

Luego podemos usarla para acceder al modelo:

¿Puedo modificar o extender las clases de

entidades generadas por EF?

Las clases generadas en el archivo .designer son

re-generadas cada vez que se actualiza el modelo

en el archivo .edmx. En consecuencia, no

podemos modificar o agregar código a esas

clases. La buena noticia es que son clases

parciales y podemos extenderlas en otro archivo o

bien podemos usar herencia.

¿Qué pasa si la base de datos cambia?

Habrá que actualizar el modelo conceptual. Esto

puede lograrse fácilmente a través del designer del

edmx:

Se inicia el asistente de actualización en el cual

podemos agregar nuevas tablas, vistas o stored

procedures, refrescar las tablas existentes o

eliminar otras.

Page 5: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

4

Una vez finalizado el asistente, el archivo edmx se

actualiza y se re-generan las clases de entidades.

Luego habrá que actualizar el código que hace

referencia a las entidades modificadas (si

corresponde).

3 MODEL FIRST

La idea aquí es crear primero el modelo

conceptual y a partir de este generar la base de

datos.

Usando Visual Studio podemos arrancar creando

un archivo .edmx vacío y utilizamos el diseñador

visual para crear nuestras entidades con sus

propiedades y relaciones con otras entidades.

Cuando tenemos nuestro modelo conceptual

completo, podemos generar los scripts de SQL

para crear el esquema de base de datos.

¿Qué pasa si la base de datos cambia?

En realidad, la base de datos debe cambiar como

consecuencia de un cambio en el modelo

conceptual.

Entonces, ¿Qué pasa si el modelo conceptual

cambia?

Habrá que actualizar el modelo conceptual de

EntityFramework y generar los scripts SQL de

creación de la base de datos.

Desafortunadamente, los scripts SQL generados a

partir del modelo conceptual son solo scripts de

creación. Es decir, no son scripts de cambios o

actualización de nuestro esquema de base de

datos. En consecuencia, deberíamos borrar la

base de datos y volver a crearla. Obviamente, esto

Page 6: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

5

no será factible en un entorno de producción y

deberemos elegir otras alternativas. Por ejemplo:

Actualizar el esquema de datos a través de

scripts escritos a manos o generados

mediante una herramienta de comparación

de esquema de datos. También podríamos

alterar el esquema usando el

Administrador de base de datos.

Luego deberíamos, actualizar el modelo

conceptual de Entity Framework (edmx) y

asegurarnos que el mapeo hacia la base

de datos es correcto.

Finalmente, actualizar el código existente

en la aplicación.

Ya tengo mi modelo conceptual creado, ¿como

sigo?

Bueno, a partir de ahora no difiere del

enfoque Database First. Podemos escribir querys

contra el modelo conceptual y realizar las

operaciones de persistencia necesarias.

¿Las clases de entidades generadas con Model

First son POCO?

De forma predeterminada NO. Las clases

contienen metadata y heredan de clases

dependientes de EntityFramework. Al igual que

con Database First, disponemos de una clase que

hereda de ObjectContext que nos permite

interactuar con el modelo.

Aquí de inserta un nuevo término que es POCO:

POCO: Son las siglas de Plain Old C# Object, y se

refieren a clases simples que no dependen de

ninguna framework. Es un término derivado del

concepto del mundo Java: POJO.

Entity Framework permite utilizar clases de datos

personalizadas junto con su modelo de datos sin

realizar ninguna modificación en las clases de

datos. Esto significa que podrá utilizar objetos CLR

"antiguos" (POCO), tales como objetos de dominio

existentes, con el modelo de datos. Estas clases

de datos POCO (también conocidos como objetos

que ignoran la persistencia), asignadas a

entidades definidas en un modelo de datos,

admiten la mayoría de los mismos

comportamientos de consulta, inserción,

actualización y eliminación que los tipos de entidad

generados por las herramientas Entity Data Model.

Requisitos de la asignación

Para utilizar entidades POCO con un modelo de

datos, el nombre del tipo de entidad debe ser igual

que la clase de datos personalizada, y cada

propiedad del tipo de entidad debe asignarse a una

propiedad pública de la clase de datos

personalizada. Los nombres de los tipos y de cada

una de las propiedades asignadas deben ser

equivalentes.

Page 7: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

6

4 CODE FIRST

Este enfoque está disponible a partir de la

versión ADO.NET Entity Framework 4.1 y nos

permite crear un modelo de clases POCO (Plain

Old CLR Object) a partir del cual podemos generar

una base de datos y/o mapear esas clases a una

base de datos existente.

Aquí no existe un archivo edmx con las

definiciones XML del modelo conceptual, el

modelo de datos y el mapeo entre ambos.

El modelo conceptual está definido por el conjunto

de clases que hemos creado para representar a

las entidades de nuestro modelo de dominio. La

idea es que nuestras clases POCO sean

mapeadas directamente a la base de datos.

La ventaja de usar clases POCO es que el modelo

de clases es más limpio y las clases no tienen

dependencia con EntityFramework (como sucede

cuando las entidades heredan deEntityObject,

implementan ciertas interfaces y contienen

atributos).

La experiencia indica que si ya tenemos una base

de datos heredada, es altamente probable que

haya diferencias con el modelo conceptual

utilizado en la aplicación. Entonces:

¿Qué hacemos cuando el esquema de

base de datos es diferente al modelo

conceptual?

¿Qué tal si quiero especificar

restricciones, tipos de datos o

validaciones a los campos?

Bien, podemos resolver estas cuestiones y otras

tantas a través de:

1. Data Annotations

2. Mapping Fluent API

Data Annotations

Estas clases están disponibles en el

namespace System.ComponentModel.DataAnnotat

ions y permiten especificar restricciones o

validaciones, especificar nombres de tablas o

campos, etc.

Mapping Fluent API

La segunda alternativa que Code First ofrece para

definir el mapeo entre el modelo conceptual y la

base de datos es mediante Fluent API. Esta API

permite especificar la configuración de mapeo y

otras configuraciones mediante código.

¿Y el contexto de datos de Code First?

De forma predeterminada, con el

enfoque Database First y Model First disponemos

de una clase ObjectContext del cual hereda el

contexto de datos de nuestra aplicación.

Page 8: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

7

Con el enfoque Code First tenemos un nuevo

contexto llamado DbContext del cual debe heredar

el contexto de datos de nuestra aplicación.

En el contexto de datos, básicamente estamos

definiendo cuáles son los conjuntos de entidades

que serán mapeados a la base de datos.

Adicionalmente, podemos usar inicializadores de

bases de datos, especificar configuraciones de

mapeo o interceptar las operaciones

de SaveChanges (entre otras).

DbContext no es más que una versión simplificada

de ObjectContext, y también puede ser usando

con los enfoques Database First y Model First.

5 LO NUEVO DE CODE FIRST Y LOS

OTROS ENFOQUES DE DESARROLLO

Como ya vimos anteriormente recientemente salió

a la luz la versión reléase de Entity

Framework 4.3.0 y en la que ya podemos disfrutar

de muchas características que seguramente

estarán disponibles en la versión 5.0 que viene en

camino.

Entre las principales características que podemos

encontrar en versión están:

New Code First Migrations Feature: esta es una

de las principales características de la nueva

versión de EF y nos permite ir “migrando”

nuestra base de datos creada con Code First a

media que el modelo va cambiando. Esto

quiere decir que, entre otras cosas, podemos

recuperar una instancia determinada de la base

de datos entre las distintas versiones

(migraciones) que hayamos generado.

Removal of EdmMetadata table: como ya

hemos visto, con Code First podemos crear la

base de datos simplemente ejecutando la app.

A la creación se le suman todas las ventajas

del esquema de generación que forma parte

de Migrations.

Data Annotations on non-public properties: por

defecto Code First no incluye las

propiedades protected,private o internal. Si

utilizábamos estos modificadores por medio de

otras API, los Data Anottations en dichas

propiedades eran ignoradas. En esta nueva

versión se ha modificado esta situación por lo

que las Data Anottations en esos casos serán

procesadas.

More configuration file settings: ahora es

posible definir muchas más caracteristicas

sobre Code First en nuestro archivo de

configuración.

A diferencia de los dos primeros enfoques

(Database First y Model First), no vamos a contar

con la ayuda de un diseñador de entidades y

asociaciones (Entity Data Model), por lo que va a

ser muy importante nuestra implicación a la hora

de definir los objetos.

Page 9: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

8

Además de la simplificación de nuestras clases,

también se ha modificado la creación del contexto

que va a estar encargado de realizar las

operaciones contra la Base de Datos. En los dos

enfoques anteriores, nuestro contexto hacía uso

de la clase Base “ObjectContext”, y Code First va a

hacer uso de la clase “DbContext” que es una

simplificación del contexto.

6 CONCLUSIONES

Podríamos llegar a decir que Entity Framework es

una forma de abstraerse del tipo de Base de Datos

que existe detrás de un sistema, gracias al mapeo

de las tablas hacia entidades.

Acerca de DATABASE FIRST

El enfoque Database First nos permite

generar rápidamente nuestro modelo de

clases y mantenerlo sincronizado cuando

el modelo de datos cambia.

Las clases generadas heredan

de EntityObject y se utiliza una clase que

hereda de ObjectContext para administrar

el modelo y realizar las operaciones de

persistencia.

Acerca de MODEL FIRST

El enfoque Model First nos permite crear primero

un modelo conceptual y generar luego el esquema

de base de datos.

Al igual que Database First se basa en un

archivo edmx para almacenar las

definiciones XML del modelo conceptual,

modelo de datos y mapeo entre ambos.

Las clases generadas automáticamente no

son POCO, pero podemos generar clases

POCO usando otras herramientas de

generación de código.

ACERCA DE CODE FIRST

Code First es el nuevo enfoque soportado

por Entity Framework. Permite mapear

nuestras clases POCO directamente a la

base de datos.

DbContext API nos permite realizar las

operaciones de acceso a datos.

7 REFERENCIAS

[1] Sobre WCF, DTO, EF, POCO y los principios

de la programación

Última actualización: Enero del 2012.

http://www.programandonet.com/site/sobre-wcf-

dto-ef-poco-y-los-principios-de-la-programacion

[2] Entity Framework: Database First

Última actualización: Junio 2011

http://gustavoazcona.blogspot.com/2011/06/entit

y-framework-database-first.html

[3] Entity Framework: Model First

Última actualización: Julio del 2011

http://gustavoazcona.blogspot.com/2011/07/entit

y-framework-model-first.html

Page 10: Enfoques Del Entity Framework Paper Majo

Enfoques del Entity Framework

.

9

[4] Entity Framework: Code First

Última actualización: Julio del 2011

http://gustavoazcona.blogspot.com/2011/07/entit

y-framework-code-first.html

[5] Entity Framework: Code First (1)

Última actualización: Julio del 2011

http://www.programacion.com/articulo/entity_fra

mework_code_first_1_870

[6] Entity Framework:

http://programacion.com/articulo/entity_framewor

k_713

[7] Información general de Entity Framework:

http://msdn.microsoft.com/es/library/bb399567.a

spx

[8] Entity Framework: Guias y enfoque:

Última actualización: Agosto del 2010

http://alexjimenez.wordpress.com/2010/08/31/en

tity-framework-guas-bsicas-y-el-enfoque/

[9] We love JavasCript

Última actualización: Julio del 2011

http://geeks.ms/blogs/mrubino/

[10] Entity framework 4.3.0 Released

Última actualización: febrero del 2012

http://sebys.com.ar/2012/02/

[11] POCO en Entity framework 4.0

Última actualización: enero del 2010

http://geeks.ms/blogs/adiazmartin/archive/2010/

01/17/poco-en-entity-framework-4-0.aspx