EntornoTrabajo - ModelFirst

Entity Framework: Model First

En uno de los post anteriores vimos Database First como el primero de los métodos con los que implementar Entity Framework en nuestra aplicación. Ahora veremos el segundo: Model First.

A diferencia de Database First, Model First se caracteriza por primero definir las clases en la aplicación 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 aplicación, es decir no debemos usar un conjunto de datos ya existentes, y el equipo de trabajo prefiere usar herramientas gráficas antes que sentencias SQL.

Hagamos un ejemplo con esta técnica. 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 DC
Agregar nuevo DataContext

Luego de agregarlo, nos aparecerá la siguiente pantalla. Es aquí donde debemos seleccionar la opción “Modelo vacío”, ya que de lo contrario estaríamos usando el enfoque Database First:

SeleccionarModeloVacio - ModelFirst
Seleccionar la opción “Modelo vacío”

Una vez creado el archivo base, se abrirá el archivo vacío, en el cual crearemos las entidades de nuestra aplicación. Básicamente, el entorno de trabajo disponible que tendremos es el siguiente:

EntornoTrabajo - ModelFirst
Opciones disponibles en Model First

  1. En este área tendremos disponibles los elementos a agregar a nuestro archivo. Básicamente 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, básicamente 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 opción “Agregar nuevo” > “Propiedad escalar”:

AgregarPropiedad - ModelFirst
Agregar nueva propiedad a entidad

Una vez que la creamos, veremos en el sector de las propiedades todas aquellas características que podemos modificar de la propiedad seleccionada:

PropiedadesPropiedad - ModelFirst
Propiedades asociadas a la propiedad (valga la redundancia)

Entre las características disponibles podemos resaltar:

  • Longitud máxima.
  • 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 impactarán en las estructuras de la base de datos, algunas de las cuales se nombraron anteriormente.

Ahora vamos a crear la clase Book y la relación con Editorial. Para hacer la relación, solo debemos seleccionar la herramienta “Asociación”, y seleccionar las dos entidades a relacionar:

RelacionEntidades - ModelFirst
Crear relación entre dos entidades

Como se ve en el área de propiedades de la relación, podemos establecer todas aquellas características propias de la misma de forma sencilla y sin tener que usar sentencias SQL.

Una vez finalizada la creación de nuestras entidades tendremos que generar el código SQL para crear las estructuras en la base de datos. Para ello solo debemos hacer click derecho sobre nuestro archivo y seleccionar la opción “Generar base de datos desde modelo…”:

OpcionGenerarDB - ModelFirst
Opción para generar base de datos desde el modelo

Allí crearemos una nueva conexión 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á confirmación para crearla:

CrearConexion - ModelFirst
Crear nueva conexión y nueva base de datos

Una vez hecho esto, tendremos nuestro script SQL listo para ejecutar:

SQLGenerado - ModelFirst
Script de estructuras SQL generadas

Una vez realizada la ejecución, podremos ver que las estructuras han sido correctamente creadas, tan solo copiando y pegando el código creado (sin hacer absolutamente nada más):

TablasCreadas - ModelFirst
Estructuras creadas

Cabe destacar que al momento de crear la conexión con la base de datos es cuando se crearán todas las clases y el DataContext que nos permitirá hacer el acceso a los datos desde nuestra aplicación. Esto es solo para la creación inicial, posteriormente cuando agreguemos nuevas entidades al modelo los cambios en las clases se harán automáticamente, 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 técnica Code First, la cual usa un enfoque ligeramente diferente.

Estos son los pasos necesarios para usar la técnica Model First. Como conclusión (y como se mencionó en diversas partes de este post) la gran ventaja de este método es poder crear las estructuras de la base de datos que deberá usar nuestra aplicación 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 gráfica 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 código SQL para crear todo de cero. A lo sumo debemos tomar ese script y adaptarlo para aplicar solo las modificaciones necesarias.

Anuncios

Un comentario en “Entity Framework: Model First

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s