Como crear un proyecto MVC con Entity Framework a partir de una base de datos

Posted on Posted in .Net, Entity Framework, MVC

Aunque MVC en .Net tiene muuuuucho tiempo y existen muuuuuchos tutoriales, la mayoria habla de como crear la base de datos (el modelo) desde codigo, este post mostrara como como crear un proyecto MVC con Entity Framework a partir de una base de datos, generando el codigo del modelo a partir del esquema en la DB.

Creando el proyecto MVC

Al momento de escribir este post, estoy usando Visual Studio Community 2015, por lo que para crear el proyecto nos vamos File > New > Project,  una vez abierta la ventana de New project, dentro de Visual C# > Web encontraremos la opcion ASP.NET Web Application, ponemos el nombre del proyecto y le damos en OK.

ASP.NET Web application - MVC
Creando el proyecto MVC

Nos saldra una pantalla donde seleccionaremos el template que queremos, en este caso (obviamente) seleccionamos MVC y presionar OK. Aquí es importante prestar especial atención al botón de Change Authentication del lado derecho, ya que en caso de querer manejar la autenticacion por nosotros mismos (por ejemplo en caso de una aplicación interna) deberemos de presionar dicho botón y seleccionar No Authentication, y si queremos que .Net lo maneje por nosotros (lo cual hace bastante bien) deberemos dejar Individual User Accounts, que es la default; tambien hay otras opciones pero estas dos son las dos mas comunes.

Entity Framework

Una vez Visual Studio termine de generar los archivos necesarios, lo primero que haremos sera agregar Entity Framework al proyecto, para esto descargaremos el NuGet que lo contiene, necesitaremos ir a Tools > NuGet Package Manager > Manage NuGet Packages for solution… y sobre el tab de Browse tendran que escribir EntityFramework, y darle en Install.

Entity Framework, es el ORM (Object-Relational mapping) desarrollado por Microsoft que permite la interacción a los datos de manera sencilla, es decir, nos quita el tedioso trabajo de estar creando nosotros los métodos, clases y utilerias para accesar a la DB cada vez que creamos un proyecto.

Agredando el NuGet Entity Framework
Agredando el NuGet Entity Framework

Creando el modelo

Ya que tenemos instalado Entity Framework, utilizaremos un wizard para generar todo el código en C# de nuestra DB, es decir, la librería generara por nosotros las entidades (clases) en C# que representaran a cada una de las entidades (tablas) en la DB, y asi poder interactuar con SQL Server en este caso.

Para generar estas clases daremos click derecho en la carpeta de Models > Add >  New Item…, posterior a esto seleccionaremos Data dentro de Visual C# y  elegiremos ADO.NET Entity Data Model, escribimos el nombre del modelo (algo así como InventoryModel, CoursesModel, etc) y presionamos Add.

En la ventana que sale elegiremos la primera opción, EF Designer from database, y posteriormente saldrá una ventana, preguntándonos por la cadena de conexión, hacemos click in New Connection y ponemos los datos que nos pide, seleccionamos la DB y le damos OK.

Le damos en Next y luego nos aparecerá una ventana, pidiendo que selecciones los objetos que quieres mapear, seleccionamos las tablas, y en caso de que tengas algunos procedimientos almacenados o vistas tambien, aunque en teoría si vas a usar Entity framework no deberías de tener procedimientos almacenados (hay situaciones en que es necesario, así que si los necesitas hay una forma muuuy fácil de llamarlos), seleccionamos las primeras dos opciones

Entity data model wizard
Opciones a seleccionar para generar las entidades / clases

Y finalmente presionamos Finish y se nos mostrara el diagrama de nuestra DB lo cual significa que ya se crearon las clases necesarias.

DB schema
Diagrama de la DB generado por Entity Framework

Creando el controlador y las vistas

Bien, ya que Visual Studio y Entity Framework generaron las clases necesarias para la interacción con la DB, ahora es tiempo de que tambien generen el controlador (la lógica) y las vistas (lo que ve el usuario, es decir básicamente HTML).

Click derecho en la carpeta de Controllers > Add > New Scaffolded Item…, seleccionamos MVC 5 Controller with views, using Entity Framework, esto nos abrirá una ventana donde tendremos que seleccionar el Model Class (es decir la tabla / entidad / clase ) y el Data Context Class (es decir la conexión que creamos en el paso anterior), es importante seleccionar los siguientes puntos: Generate views, Reference script libraries y Use a layout page, así como a continuación:

Add controller
Agregando el controlador y las vistas

Le damos en Add y listo, bueno casi, si les aparece un error como el siguiente, solo tenemos que hacer justo lo que dice, compilar el proyecto y ahora si agregar el controlador y las vistas.

Error de entity framework
Si te sale este error, compila el proyecto y listo

El resultado

Es hora de ver que es lo que hemos hecho sin escribir ni una sola palabra de código, si corremos el proyecto, nos encontraremos con la pantalla inicial del proyecto.

Como acabo de agregar el controlador y las vistas de la entidad User, en la URL solamente tengo que agregar el controlador con lo que (en mi caso) queda http://localhost:49998/Users, lo que nos lleva a la vista Index, que nos mostrara la lista de los usuarios, que ene este caso esta vacia.

Index view of users
Vista Index de la entidad User

Y si le damos en Create New nos llevara a la vista Create, donde podemos dar de alta al nuevo usuario, e incluso podemos ver que por default valida que los datos sean del tipo correcto, como es el caso del campo RecordDate que es de tipo DateTime, nos pide una fecha valida.

2016-11-05-16_28_20-create-my-asp-net-application-firefox-developer-edition
Vista Create de la entidad User validando un campo fecha

Hay otras validaciones utiles que podemos declarar de manera sencilla del lado del servidor en C# y nos harán la validación del lado del cliente en Javascript tambien, de eso hablare en otro post.

Si ponemos los datos validos y presionamos el botón para agregar el registro, lo que pasara es que nos mostrara de nuevo la vista de Index, pero ahora estará el registro que se acaba de guardar.

Entity framework index view
Registro agregado

Como podemos  ver Entity Framework nos creo una base funcional donde podemos ver, dar altas, bajas y cambios sin escribir ni una sola palabra de código, y digo una base funcional, porque muy probablemente van a querer agrear ciertas validaciones (en este post vemos como hacer validaciones con una sola linea usando Data Annotations), localizaciones (y en este otro post podemos aprender a como hacer la aplicación en multilenguaje), autorización, autenticación y funcionalidades extra que no se crearon por default.

Gracias a esta base generada nos vamos a ahorrar todo el desarrollo básico que se necesita para poder lograr este CRUD y enfocarnos a lo que realmente le agregara valor al proyecto.