You are on page 1of 11

ASP.

NET MVC

Entity Framework: Model First


14 ABRIL, 2014 DIEGO BERSANO1 COMENTARIO
En uno de los post anteriores vimos Database First como el primero de los mtodos con
los que implementar Entity Framework en nuestra aplicacin. Ahora veremos el
segundo: Model First.
A diferencia de Database First, Model First se caracteriza por primero definir las clases
en la aplicacin y a partir de ello crear la base de datos asociada. Esto es posible para
los casos en los cuales estamos creando al mismo tiempo la base de datos y la
aplicacin, es decir no debemos usar un conjunto de datos ya existentes, y el equipo de
trabajo prefiere usar herramientas grficas antes que sentencias SQL.
Hagamos un ejemplo con esta tcnica. Para ello vamos a usar el mismo modelo que
usamos en el post de Database First:

Books: almacena los libros.


Editorials: almacena las editoriales.
Authors: almacena los autores.
Withdraws: almacena los retiros que hacen los usuarios.
Users: usuarios que hacen los retiros.
Lo primero que vamos a hacer es crear un nuevo elemento de tipo ADO.NET Entity
Data Model, el cual denominamos en este caso TestDataContext:
Agregar nuevo DataContext
Luego de agregarlo, nos aparecer la siguiente pantalla. Es aqu donde debemos
seleccionar la opcin Modelo vaco, ya que de lo contrario estaramos usando el
enfoque Database First:
Seleccionar la opcin Modelo vaco
Una vez creado el archivo base, se abrir el archivo vaco, en el cual crearemos las
entidades de nuestra aplicacin. Bsicamente, el entorno de trabajo disponible que
tendremos es el siguiente:
Opciones disponibles en Model First
1. En este rea tendremos disponibles los elementos a agregar a nuestro archivo.
Bsicamente son las entidades y las relaciones entre las mismas.
2. El archivo donde definiremos las entidades y sus relaciones.
3. Las propiedades asociadas a las entidades y relaciones que vayamos creando.
Una vez reconocidos estos elementos, bsicamente lo que debemos hacer es arrastrar los
elementos necesarios desde el Cuadro de herramientas. Por ejemplo, creemos la clase
asociada a la editorial primero. Para ello arrastramos desde las herramientas una nueva
entidad, la cual nombraremos Editorial. Inicialmente nos agregar una propiedad Id
para la clase. Para agregar nuevas, solo debemos hacer click derecho en la entidad y
seleccionar la opcin Agregar nuevo > Propiedad escalar:
Agregar nueva propiedad a entidad
Una vez que la creamos, veremos en el sector de las propiedades todas aquellas
caractersticas que podemos modificar de la propiedad seleccionada:
Propiedades asociadas a la
propiedad (valga la redundancia)
Entre las caractersticas disponibles podemos resaltar:

Longitud mxima.
Acepta valores NULL.
Clave de entidad.
Nombre.
StoreGeneratedPattern: permite establecer si la columna ser de tipo Identity o
Computed.
Tipo.
El cuadro de Propiedades aplica a todos los elementos de modelo, como son las
entidades, propiedades, relaciones e incluso al modelo en si mismo. Esto permite
personalizar todos los aspectos que posteriormente impactarn en las estructuras de la
base de datos, algunas de las cuales se nombraron anteriormente.

Ahora vamos a crear la clase Book y la relacin con Editorial. Para hacer la relacin,
solo debemos seleccionar la herramienta Asociacin, y seleccionar las dos entidades a
relacionar:
Crear relacin entre dos entidades
Como se ve en el rea de propiedades de la relacin, podemos establecer todas aquellas
caractersticas propias de la misma de forma sencilla y sin tener que usar sentencias
SQL.

Una vez finalizada la creacin de nuestras entidades tendremos que generar el cdigo
SQL para crear las estructuras en la base de datos. Para ello solo debemos hacer click
derecho sobre nuestro archivo y seleccionar la opcin Generar base de datos desde
modelo:
Opcin para generar base de datos desde el modelo
All crearemos una nueva conexin a la base de datos. En este ejemplo la crearemos
desde cero, escribiendo un nombre que no existe en el servidor. Al hacerlo as, nos
solicitar confirmacin para crearla:
Crear nueva conexin y nueva base de datos
Una vez hecho esto, tendremos nuestro script SQL listo para ejecutar:
Script de estructuras SQL generadas
Una vez realizada la ejecucin, podremos ver que las estructuras han sido correctamente
creadas, tan solo copiando y pegando el cdigo creado (sin hacer absolutamente nada
ms):
Estructuras creadas
Cabe destacar que al momento de crear la conexin con la base de datos es cuando se
crearn todas las clases y el DataContext que nos permitir hacer el acceso a los datos
desde nuestra aplicacin. Esto es solo para la creacin inicial, posteriormente cuando
agreguemos nuevas entidades al modelo los cambios en las clases se harn
automticamente, pero no as en la base de datos. Esta es la principal desventaja de esta
propuesta, ya que cuando hagamos un cambio en el modelo (por menor que sea) el
asistente nos generar el script SQL para volver a generar todas las estructuras de
nuevo, debiendo borrar las previamente creadas. Entity Framework ofrece el concepto
de Migraciones, las cuales solo aplican a la base de datos las modificaciones que se han
hecho en las clases asociadas. Lamentablemente, este concepto solo est disponible bajo
la tcnica Code First, la cual usa un enfoque ligeramente diferente.
Estos son los pasos necesarios para usar la tcnica Model First. Como conclusin (y
como se mencion en diversas partes de este post) la gran ventaja de este mtodo es
poder crear las estructuras de la base de datos que deber usar nuestra aplicacin sin
necesidad de escribir una sola sentencia SQL (eso si, debemos tener conocimientos
sobre bases de datos relacionales para poder establecer las propiedades de la forma
correcta) y de una forma grfica intuitiva y totalmente integrada a Visual Studio. Como
principal desventaja es la poca mantenibilidad que ofrece, ya que ante cualquier cambio
que se haga en las entidades se generar el cdigo SQL para crear todo de cero. A lo
sumo debemos tomar ese script y adaptarlo para aplicar solo las modificaciones
necesarias.

You might also like