5.26.2011

Model First Entity Framework: Pensando Primero en Objetos

Si alguno tiene la ventaja de iniciar un proyecto desde cero, en donde la base de datos no ha sido definida, sin duda tiene una gran oportunidad de aprovecharse de una característica muy interesante del Entity Framework: Model First.

¿Qué es Model First?

El model first es una capacidad de diseño que tiene como idea principal el modelar las clases que voy a utilizar en mi lógica de negocios y a partir de estas, generar mi diagrama de base de datos. En otras palabras, no vamos a crear tablas ni relaciones en la base de datos, si no más bien vamos a crear clases y el Entity Framework nos genera la base de datos – o al menos su contenido. Para ilustrarlo, como siempre vamos a trabajar con un ejemplo.

Crear una Aplicación Utilizando Model First

En primera instancia hacemos una aplicación WPF – puede ser de cualquier tipo – y luego procedemos a agregar un nuevo ítem y seleccionamos ADO.NET Entity Model.

image

Cuando aparece el wizard para proceder con la configuración del modelo de Entity Framework que queremos trabajar seleccionamos “Empty Model”.

image

Una vez seleccionado procedemos a seleccionar “Finish”. En este momento aparecerá el lienzo del modelo del entity framework vacío.

image

El siguiente paso es crear la base de datos en SQL Server. En este caso vamos a crear una base de datos para mi sitio web www.formsevolution.net. A esta base de datos no le vamos a agregar ningún artefacto, solamente vamos a crearla.

image

Seguidamente procedemos a trabajar con el diagrama de entidades – clases al fin y al cabo. Vamos a crear un par de entidades para manejar los cursos que puedo impartir y los temarios respectivos de cada curso. Para esto primero procedemos a agregar una entidad en el modelo del Entity Framework.

image

A la hora de crear la entidad, procedemos a definir el nombre de la misma y además como se llamará el conjunto o colección de entidades de este tipo. Además, creamos la entidad con una llave auto numérica.

image

El siguiente paso es agregarle las propiedades o el estado a las entidades.

image

En este caso agregamos nombre del curso, duración del curso y descripción del curso

image

Ahora procedemos a crear una relación entre el tema y entre el curso. Para lograr esto, simplemente creamos una relación entre ambas entidades. En el toolbox del EF aparece la figura para hacer relaciones.

image

La relación se crea desde la entidad cursos hacia la entidad temas. Como podemos ver en la siguiente figura se crean automáticamente dos propiedades de navegación; además, tal y como debe ser en la conversión de la orientación a objetos a lo relacional, no aparecen llaves foráneas en los objetos, ya que esto es parte del mapeo que debe hacer el ORM.

image

El siguiente paso es generar la base de datos. Para esto vamos a darle botón derecho sobre la superficie del modelo – no sobre las entidades – y vamos a seleccionar “Generate Database from Model”.

image

Seguidamente nos aparece una pantalla para seleccionar el string de conexión que vamos a utilizar

image

Esta acción nos va a generar un script con la información necesaria para generar nuestros objetos en la base de datos.

image

Este script se salvará luego como un archivo con extensión edmx.sql el cual vemos a continuación.

image

Este archivo tiene muchas ventajas ya que puedo meterlo en el control de código para mantener un versiona miento e historial del mismo – TFS, Subversion, SourceSafe, etc.

Luego ejecutamos el código generado en SQL Server creando un nuevo script en la base de datos que se creó para tal fin. Esto va a crear las tablas en la base de datos. Si vemos el diagrama de base de datos podemos ver que las llaves foráneas se crearon automáticamente aunque no hayamos creado los campos en las entidades para tal fin. Esto se da porque en la traducción de lo relacional a lo orientado a objetos estas dos relaciones se representan de forma distinta y por lo tanto se conoce la equivalencia de ambos.

image

Y ahora estamos listos para interactuar con nuestra recién creada base de datos y nuestro modelo de entidades.

Etiquetas de Technorati:

1 comentario:

Jorge dijo...

Hola, te hago una consulta, es posible hacer todo esto sin la ayuda de los diseñadores, es decir crear la base de datos (teniendo el modelo edmx) desde el código en cualquier momento que se està ejecutando la aplicación...? Desde ya muchas gracias.