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
Enfoques del Entity Framework
.
1
Enfoques del Entity Framework
María José Chávez Estrada
e-mail: [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:
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.
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.
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
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.
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.
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.
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
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
Top Related