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="Data Source=RETURNGIS\SQLEXPRESS;Initial Catalog=MovieManager;Integrated Security=True;MultipleActiveResultSets=True"" 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!