“…Life is a lesson, you learn it when you're through”
Take a look around, Limp Bizkit
Introduccion
Hola a todos, luego de mas de un año de ausencia decido retomar mi blog con un nuevo post acerca de EF4, entre muchas otras motivaciones personales un post post en uno de los blogs que acostumbro seguir, sumo un elemento extra a esta motivacion, el blog del que les hablo es de Angel “Java” Lopez y el post que me motivo es este “Mi Tia Carlota, un año despues”. Concretamente en este ultimo tiempo si bien estuve involucrado, ya sea por motivos laborales o personales, en diferentes proyectos y estudiando nuevas tecnologias, en ningun caso o en muy pocos mis inquitudes y trabajos han generado algun “entregable” mas allla de lo producido en el ambito estrictamente laboral, lo cual solo incumbe a ese ambito y no es apto para compartir libremente hacia la comunidad. En fin; movido por estos aspectos es que retomo la actividad en mi blog.
Este post continua una serie, en los que vuelco aquello que voy aprendiendo acerca de Entity Framework 4, si bien aun no he tenido la posibilidad de utilizar esta herramienta en un proyecto profesional, estoy siempre jugando alrededor de este ORM de Microsoft y lo he probado y lo seguire utilizando en mis proyectos personales. Para este post voy a abordar un tema que fue largamente esperado por la comunidad que utiliza EF como es Code-First Development, esta modalidad es una alternativa a la que ya he tratado de ilustrar con los otros post de esta serie, en la que el desarrollo estaba “centrado en la base de datos” en esta en cambio el desarrollo se centra en el codigo.
Para ilustrar el uso de EF code first development vamos a crear una muy simple aplicacion web utilizando el framework de microsoft ASP.Net MVC 2, con el cual tambien he estado experimentando y leyendo bastante en este tiempo, y el cual me ha fascinado. Comencemos con el ejemplo propuesto:
Paso 1.
Lo primero que haremos sera crear un nuevo proyecto en visual studio 2010, seleccionaremos dentro de la categoria Web, el template ASP.NET MVC 2 Web Application, como vemos en la imagen a continuacion:
Una de las cosas que tiene de bueno el MVC de microsoft son sus puntos de extensibilidad, y el primero de estos puntos es la ventana que veremos luego de dar OK al dialogo de crear nuevo proyecto, y es una ventana que nos pregunta si queremos agregar un proyecto de test a nuestra aplicacion, y de crearlo, nos permitira seleccionar que framework de test vamos a utilizar (por defecto MSTest). En este caso nosotros seleccionaremos que no deseamos crear un proyecto de test (esta opcion significa en las palabras de Scott Hanselman; “Soy una mala persona”
)
Paso 2.
Definimos el modelo, para este caso vamos a utilizar un modelo muy sencillo, digamos que los alumnos de 4to grado de un colegio van rindiendo diferentes evaluaciones a lo largo del a;o esta aplicacion me permite cargar dichas evaluaciones y realizar con ellas algunas operaciones sensillas con estos.
Vamos a agregar dos clases a nuestra carpeta de Modelo (boton derecho Add | Class), Alumno y Evaluacion, de esta forma:
public class Alumno
{
public int ID { get; set; }
public string Nombre { get; set; }
public string Apellido { get; set; }
public IList<Evaluacion> evaluaciones { get; set; }
}
public class Evaluacion
{
public int ID { get; set; }
public int Nota { get; set; }
public string Name { get; set; }
public DateTime Fecha { get; set; }
}
En las imagenes podemos ver los cambio que introducimos:
Como podemos ver aca acabamos de crear 2 clases que son “plain old CLR object” aka POCO, EF 4 tiene soporte para objetos POCO, nos valemos de esto cuando utilizamos esta estrategia de Code First, como vemos aqui aun no hemos puesto ni una sola palabra acerca de nuestra base datos, vamos a continuar con el ejemplo sin tocar aun este aspecto.
Paso 3
El siguiente paso consiste en crear una clase de contexto que maneje la persistencia en la base de datos nuestra clase de contexto vamos implmentarla de la siguiente forma: Nuevamente agregamos una clase a nuestra carpeta Models (boton derecho Add | Class) la cual nombramos como _4toGradoContext; aqui comenzamos a utilizar EF 4 haciendo que esta clase herede de DbContext como vemos en la siguiente imagen:
Como vemos en el codigo Visual Studio no conoce aun a que tipo estamos haciendo referencia cuando decimos que nuestra clase de contexto hereda de DbContext, entonces vamos completar este paso agregando las referencias que nos faltan. Para cumplir con esta tarea vamos a utilizar NuGet.
Brevemente NuGet es un sistema de administracion de paquetes orientado a desarrolladores, open source y gratis; para el framework .NET y cuyo fin es simplificar el proceso de incorporar librerias de terceras partes al framework .NET durante el desarrollo. Descargando NuGet desde aqui:
http://nuget.codeplex.com/releases/58939/download/222685
Una vez que instalamos NuGet, estaremos listos para agregar el paquete de EF Code First que necesitamos de la siguiente forma: boton derecho en References | Add Library Package Reference…)
Aqui vemos el dialogo que aparece:
En el menu de la izquierda deleccionamos la opcion Online, y alli podemos buscar en la barra de busqueda Entityframework y vamos a seleccionar la opcion que esta resaltada en la imagen de arriba, y hacemos click en el boton Install y se agregaran todas las herramientas necesarias para usar EF 4.
Ahora si podremos completar nuestra clase de contexto de la siguiente forma:
Este es todo el codigo que necesitamos agregar para “mapear” nuestro dominio a la base de datos, sin archivos XML ni wizards, incluso aun no hemos escrito ni una sola palabra acerca de nuestra base de datos, de la que nos vamos a ocupar ya mismo.
Paso 4
Ahora si ha llegado el momento de hablar de nuestra base de datos, vamos a crear una base de datos de la siguiente forma: Previamente tengo instalado Microsoft SQL Server 2008 R2 Express, en caso de no tenerlo instalado podemos rapida y sencillamente hacerlo sin salir de Visual Studio 2010, tenemos un boton que nos abre directamente la aplicacion Web Platform Installer 3.0 como vemos en la imagen. Desde alli es muy sencillo dercargar Microsoft SQL Server Express 2008 R2 en instalarlo.
Vamos entonces a agregar una nueva base de datos de esta forma:
Una vez creada nuestra nueva base de datos editamos el archivo de configuracion Web.config de la aplicacion web y agregamos nuestra nueva conexion a la base de datos recientemente creada
Paso 5
Vamos a utilizar ahroa nuestro modelo, y lo primero que haremos es crear un controller para crear un nuevo alumno de la siguiente forma: Haciendo click boton derecho sobre la carpeta Controllers seleccionamos Add | Controller…
Luego vemos este dialogo:
Alli editamos el codigo de nuestro nuevo Controller al que llamamos Alumno
El linea 12 podemos ver como usamos nuestra clase de contexto que sera la encargada de manejar la persistencia con la base de datos, en el metodo Create vemos que es muy sencillo crear y guardar un nuevo alumno en nustra base de datos.
Vamos ahora a crear una vista para este metodo, haciendo click boton derecho en alguna region del metodo Create del controller y alli Add View…
Para ver este dialogo:
Aqui es donde podemos crear nuestra vista que llamaremos Create y la cual sera tipada (chequeando la casilla Create a strongly-typed view) y tambien seleccionaremos Create de la lista de View Content.
Y asi vemos como se ha creado la vista para nuestro metodo create que nos permitira ingresar datos que luego a traves de la clase Alumno del modelo sera persistida en la base de datos.
Ahora SI, vamos a ver la accion, presinemos F5 y vamos a navegar a la direccion
/Alumnos/Create
Y nos encontraremos con lo siguiente:
Ahora veamos un poco que esta pasando en el controller cuando completo los campos y hago click en el boton Create
y finalmente…
Conclusion
Bueno este ha sido mi post de regreso, EF ha evolucionado mucho en este ultimo tiempo, y ha mejorado drasticamente. Por mi parte yo seguire probando esta herramienta y espero poder volcar en subsiguientes posts esas experiencias; dejo aqui algunas funtes que me ayudaron a armar este post:
Mis links sobre entity framework en delicious.com: http://www.delicious.com/camilovera/entityframework
El libro que (por ahora) me gusta sobre ASP.NET MVC 2:http://www.amazon.com/Professional-ASP-NET-MVC-Wrox-Programmer/dp/0470643188/ref=sr_1_1?s=books&ie=UTF8&qid=1303096285&sr=1-1
Un link super interesante de Jose Romaniello donde hace una comparacion profunda entre Entity Framework y NHibernate, para aquellos que quieran profundizar y ver otra herramienta ORM (mas madura que EF): http://jfromaniello.blogspot.com/2011/03/entityframework-41-rc-code-first-review.html


















