MvcScaffolding

En esta oportunidad quiero mostrarles la librería MvcScaffolding que me pareció por demás interesante y que trabaja en conjunto con Entity Framework y ASP.NET MVC 3. La finalidad principal de esta librería es facilitarnos tareas comunes y repetitivas de desarrollo que nos quitan tiempo y productividad.

Pero antes de comenzar vamos a ver que significa el termino Scaffold en nuestro ambito:

El termino Scaffolding es utilizado en muchas tecnologías de software para representar una forma rápida de generar un esquema básico de software que se puede editar y personalizar.

Con esta librería a partir de un modelo definido y escribiendo solo un par de comandos vamos a poder generar: la base de datos, los controladores con sus métodos de acción y sus respectivas vistas. Qué beneficios nos trae esto? que nos vamos a evitar tener que hacer esas tediosas acciones repetitivas como por ejemplo los formularios de carga y edición para las entidades más simples de nuestro proyecto.

Para comenzar lo primero que vamos hacer es crear un nuevo proyecto ASP.NET MVC 3 e instalar los paquetes Eyntity Framework y MvcScaffolding.

Para instalar ambas librerías podemos utilizar la consola que nos provee Nuget (en este post solo voy a mostrar como instalar el paquete MvcScaffolding, aunque la instalación de EF es similar). Para eso vamos a la opción “Tools\Library Package Manager\Package Manager Console” la cual nos abrirá la consola en una pestaña. Ahí escribimos el siguiente comando “Install-Package MvcScaffolding” y presionamos “Enter“:

Instalando MvcScafollding

Instalando MvcScafollding

Una vez que tenemos las librerías que vamos a utilizar instaladas vamos a definir el mismo modelo que en anteriores post y que estará compuesto por las entidades Agenda y Evento:

1:     public class Agenda
2:     {
3:         public int AgendaId { get ; set ; }
4:         public string Propietario { get ; set ; }
5:         public DateTime FechaCreacion { get ; set ; }
6:
7:         public virtual ICollection <Evento> Eventos { get ; set ; }
8:     }
1:     public class Evento
2:     {
3:         public int EventoId { get ; set ; }
4:         public int AgendaID { get ; set ; }
5:         public DateTime Fecha { get ; set ; }
6:         public string Comentario { get ; set ; }
7:
8:         public virtual Agenda Agenda { get ; set ; }
9:     }

Si seguiríamos con el procedimiento normal para armar nuestra aplicación, el siguiente paso seria escribir el controlador y las acciones que necesitamos para trabajar con nuestra Agenda y por último crear cada una de las vistas, cierto?… la idea de MvcScafollding es automatizar dicho proceso y simplemente escribiendo un par de lineas de comando generar nuestras interfaces CRUD (es decir, el listado de registros y los formularios de alta, baja, detalle y modificación de la entidad).

Vamos a abrir nuevamente la consola desde el menú “Tools\Library Package Manager\Package Manager Console” y escribimos el siguiente comando: “Scafolld Controller Agenda” (podemos observar que la última palabra del comando corresponde al nombre de la clase Agenda) y presionamos ENTER. Haremos lo mismo con la otra clase de nuestro modelo que es Evento.

Generando las interfaces UI y DB a partir del modelo

Generando las interfaces UI y DB a partir del modelo.

Podemos observar que entre otras cosas nos genero el controlador, las vistas y hasta el contexto de la base de datos automáticamente 🙂 :

Archivos generados

Archivos generados

Ejecutemos nuestra aplicación y accedamos a la vista de la Agenda (o a la de Eventos) para observar que ambos formularios están totalmente funcionales y persisten en la base de datos 🙂

Formulario de alta de una agenda

Formulario de alta de una agenda

Sin embargo, si vamos a la vista de eventos, el combo para seleccionar la agenda a la cual pertenece no se ve correctamente, esto debido a que en el modelo no se especifico que propiedad de la agenda queremos visualizar:

Error al visualizar el combo de Agendas

Error al visualizar el combo de Agendas

Para corregir esto simplemente agregamos el atributo DisplayColumn (provisto por la librería DataAnottations) a la clase Agenda pasandole como parámetro el atributo que deseamos que se visualice, en nuestro caso el Propietario de la misma:

1: [DisplayColumn ("Propietario")]
2: public class Agenda
3: {
4:     public int AgendaId { get ; set ; }
5:     public string Propietario { get ; set ; }
6:     public DateTime FechaCreacion { get ; set ; }
7:
8:     public virtual ICollection<Evento> Eventos { get ; set ; }
9: }

Volvemos a ejecutar y tenemos listo el formulario:

Combo de agendas mostrando el atributo que elegimos

Combo de agendas mostrando el atributo que elegimos

Una de las cosas que me llamo la atención de esta librería es forma en que arma los listados (o vistas index) ya que agregó una columna que nos permite saber el número de eventos que tiene cada agenda:

Listado de agendas

Listado de agendas

Con lo que respecta a la base de datos, la librería MvcScafollding esta integrada con Entity Framework y por default trabajan con base de datos SqlExpress. Un punto importante a saber es que el nombre con que se genera la base de datos coincide con el nombre completo del DbContext, en nuestro ejemplo el nombre de la DB es el siguiente MvcScaffolding.Models.MvcScaffoldingContext.

Otra de las cosas que me llamo la atención, es que no encontraba la cadena de conexión a la base de datos por ningun lado. Luego de leer un poco, me encontré con que, si no se especifica la cadena de conexión en el archivo web.config, EF lo que hará es generar “dinamicamente” la conexión a la base de datos utilizando el nombre del DbContext que estará corriendo sobre la instalacia local del SqlExpress (en mi caso .\SQLExpress). Recordemos que EF trabaja con el esquema de convenciones sobre el de configuraciones.

Cadena de conexión

Cadena de conexión

Pero bien podríamos modificarlo para que trabaje con SqlCE simplemente modificando la cadena de conexión dentro del archivo web.config como explicamos en este post.

Antes de finalizar el post, les voy a nombre algunas de las caracteristicas que ofrece MvcScaffolding:

  • Soporte para proyectos en C # como en VB.
  • Soporte para los ViewEngines Razor y ASPX.
  • Se pueden personalizar el código generado editando los templates T4.
  • Personalizar la lógica utilizada para generar las salidas modificando la lógica del PowerShell y de los templates T4.

Espero que les haya servido y que sigan investigando sobre esta librería que tiene muchísimo más para ofrecerles.

Anuncios

8 comentarios en “MvcScaffolding

  1. Hola Felicitaciones por el tutorial. Tengo un pequeño problema, logro instalar el MvcScaffolding creo las clases pero cuando voy a la consola a ejecutar el comando “Scafolld Controller Agenda” me sale El término ‘Scaffold’ no se reconoce como nombre de un cmdlet. Que puede ser?? Gracias y saludos desde Uruguay

    • Antes que nada gracias por las felicitaciones. Una posible solución es la siguiente: des-instalar e instalar nuevamente MVC Scaffolding desde la consola (Package Manager Console) utilizando el siguiente comando:

      PM> Uninstall-Package MvcScaffolding -RemoveDependencies

      PM> Install-Package MvcScaffolding

      Espero que esto solucione el problema… cualquier cosa la seguimos.

      • Al final logre solucionar… o por lo menos parcialmente..
        Intente primero desinstalar e instalar nuevamente el MVCScaffolding pero seguia sin funcionar. Lo que hice fue actualizar el paquete de NuGet y luego instalar nuevamente el MVCScaffolding y ahí si funcionó…Ahora estoy con otros problemas pero que se deben a que no tengo aun los conocimientos necesarios sobre esta tecnología. Agradezco tu rápida respuesta y ya que estas te pido si sabes de algún libro que me ayude a entender mas en profundidad y lograr avanzar con esta tecnología Gracias nuevamente.

      • Me alegra que se haya solucionado el problema! Si vas a comenzar con ASP.NET MVC te recomiendo el libro ASP.NET MVC 1 (escrito nada mas y nada menos por Scott Guthrie, Rob Conery, Scott Hanselman y Phil Haack). Este e-book es gratis, y aunque trate de la primer versión de ASP.NET MVC y es solo un capitulo, tiene todo lo necesario para comprender como trabaja este framework desde cero: http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf

        Sobre MVCScaffolding te recomiendo este excelente post de Steven Sanderson:http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

        Abrazos!

  2. Hola. Excelente post!! Tengo una duda, si la tabla en el contexto no siguie el estandard en ingles, por ejemplo: Modelo Ciudad, Tabla Ciudades, como se especifica a la hora de crear el controlador?? Donde puedo ver los comandos digamos especiales, ya que en el blog de Steven Sanderson, nos los veo… Gracias..

    • Hola Pierina, no estoy muy seguro de tu problema, pero lo que te puedo decir es que no es necesario utilizar escribir los nombres en ingles. Es más, en el post estamos trabajando con un ejemplo en español, ya que usamos las clases Agenda y Evento. Podes ver para el primer caso, que al aplicar el comando “Scafolld Controller Agenda” hemos generado entre otras cosas el controlador y las tablas con nombres en “español”.

      Los comandos podemos verlos acá: http://blog.stevensanderson.com/2011/01/13/mvcscaffolding-standard-usage/

      Cualquier duda la seguimos!

  3. Ahorra mucho tiempo, por poco abandono el ejemplo por no leer bien lo que tenia que hacer, me estaba lanzando error al tratar de poner “Scafolld Controller Agenda” pero pude salir a flote arreglando la palabra “Scaffold Controller Agenda”

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