Entity Framework y ASP.NET MVC

En esta ocasión, y ya que lo prometido es deuda ;), voy a explicar qué pasos son necesarios para utilizar Entity Framework en una aplicación MVC.

Volviendo al ejemplo de NHibernate y MVC, voy a retomarlo para exponer el mismo caso: Una vez que tenemos creado nuestro proyecto y hemos generado la base de datos MovieManager en SQL Server, continuamos con el siguiente paso: Hacemos click con el botón derecho sobre la carpeta Models y seleccionamos la opción Add…


Para poder utilizar Entity Framework, es necesario crear un archivo de tipo ADO.NET Entity Data Model. Con él podremos modificar de una forma visual entidades, relaciones entre ellas, etc. El nombre de este archivo no tiene mayor relevancia por lo que en esta demo quedará con el nombre de Model.edmx.
Cuando lo agregamos, automáticamente aparecerá un asistente que nos ayudará a enlazar el edmx con una base de datos existente o bien con una vacía. En nuestro caso, como ya creamos la base de datos en un post anterior, deberíamos seleccionar la primera opción.

Ahora necesitamos especificar cuál es el servidor al que queremos conectarnos y la base de datos dentro de la instancia elegida. Pulsamos en la siguiente ventana el botón New Connection… y, al menos, debemos escribir el Server Name y seleccionar la base de datos en el combo que se auto recargará más abajo, una vez rellenado el nombre del servidor.

Pulsamos OK y se generará la cadena de conexión de forma automática.

En la parte inferior de esta ventana, tenemos un campo a nuestra disposición donde podemos especificar el nombre de la conexión que acabamos de crear. Este dato será  importante para manipular la base de datos en cuestión a través de nuestro código (Se corresponde con el nombre del objeto que debemos crear para este fin). Pulsamos Next y, para finalizar con el asistente, se nos pide que seleccionemos los objetos que queremos incluir en nuestro modelo.

En este ejemplo, seleccionaré únicamente la tabla Movies y finalizo el asistente. El archivo edmx se abrirá y podremos visualizar las entidades seleccionadas en modo diseño, directamente en Visual Studio, con lo que se conoce como ADO.NET Entity Data Model Designer.

No voy a extenderme mucho más por lo que salvamos el archivo generado y nos dirigimos al controlador Home, donde modificamos el método Index de la siguiente manera:

public ActionResult Index()
{
var entityFramework = new MovieManagerEntities();
return View(entityFramework.MoviesSet.ToList());
}

En realidad el acceso es bastante simple. En la primera línea estamos declarando un objeto de tipo MovieManagerEntities, el cual se corresponde con el nombre que dimos en el asistente a la conexión con la base de datos elegida. Si no recordamos el nombre, podemos obtenerlo de una de las entradas añadidas en la sección connectionStrings del web.config.

<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
<add name="MovieManagerEntities" connectionString="metadata=res://*/Models.Model.csdl|res://*/Models.Model.ssdl|res://*/Models.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=RETURNGISSQLEXPRESS;Initial Catalog=MovieManager;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"/>
</connectionStrings>

Para finalizar, estamos retornando a View el resultado de MovieSet en forma de lista. ¿Qué es MoviesSet? En la parte de diseño del archivo edmx, teníamos una entidad llamada Movies que se corresponde con la tabla seleccionada de la base de datos. Si seleccionamos la misma en modo diseño comprobamos las propiedades:

 


Entity Set Name
es el nombre de la propiedad con la cual accederemos a la entidad Movies y, Name el propio nombre de la entidad.
Si ejecutamos la aplicación y no hemos modificado las vistas no podremos visualizar el listado que estamos solicitando, lo cual me sugiere que va siendo hora de escribir sobre las Vistas en MVC  🙂

¡Saludos!

9 comentarios en “Entity Framework y ASP.NET MVC”

  1. Hola pues esta bueno el articulo, pero quiero decirte que los ejemplos siempre son los mismo!, entonces la pregunta es, porque no hacen un ejemplo con entidades relacionada?, tratar de persistir una entidad con diferentes ObjectContext, no he encontrado un ejemplo completo de insercion, actualizacion y eliminación de entidades. POrque te comentos esto, porque solo tengo problemas con la actualización por mas que busco en internet y aplico las sugerencia para actualizar una entidad relacionada me salen multiples errores.

    De todas formas es un bueno articulo para los que quieren enterarse de que es esta nueva tecnología.

  2. Hola Edward,

    En primer lugar, muchas gracias por tu comentario y por la propuesta. Entiendo que arrancar con Entity Framework puede ser de los más sencillo pero la cosa puede llegar a complicarse llegados a un punto, más allá de listar una tabla.
    Intentaré ampliar esta parte con más ejemplos con relaciones, actualización, etc. en cuanto tenga un momento =)

    ¡Saludos!

  3. muy bueno, pero sería mejor utilizar por lo menos 2 tablas y relacionarlas, yo he querido hacerlo, pero cuando compilo me dice que la tabla1 no esta asignada, le quito las relaciones a las tablas y todo marcha bien

  4. Hola Gisela,

    te hago una consulta… es Entity framework el data access oficial de ASP.net MVC o Linq to SQL?. Tenes conocimiento si Microsoft se decidio por alguna de las dos tecnologias?. Estoy comenzando un desarrollo que sera mi primero en .net y no se que acceso de datos elegir…

    Gracias!!. Sebastian.

  5. @sebastian
    Linq to SQL ha entrado en modo “mantenimiento” y NO será ya mejorado… siendo políticamente incorrectos podríamos decir que si no está muerto está moribundo.
    Si te estás planteando usar un framework de acceso a datos, no consideres Linq to SQL, considera Entity Framework u otras alternativas que no están nada mal como Nhibernate.

    Un saludo!

  6. Muchas gracias por vuestros comentarios y a Eduard por resolver la duda 🙂 Estuve en modo OFF el fin de semana por motivos varios.

    ¡Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *