Sie sind auf Seite 1von 6

EF 5 Code First (Entity Framework Code First)

En mis ltimos desarrollos, estaba usando Entity Framework (EF) pero en su variante Base de Datos Primero (Database First), pero recientemente mi equipo y yo hemos apostado por EF Code First y estamos tan encantados con esta nueva maravilla del equipo de ADO.NET, que he decidido compartir esta pequea entrada sobre su uso. Dividiremos la serie en al menos 2 artculos: 1. EF 5 Code First. Este post. 2. EF 5 Code First Migrations. Un segundo articulo que habla sobre las migraciones en Entity Framework Code First.

EF 5 Code First
1. Crearemos una aplicacin de ejemplo (AppEjemploEfCodeFirst) que contendr 3 proyectos: AppEjemploEfCodeFirst.Web: Proyecto Web ASP.NET MVC 4 (Razor). AppEjemploEfCodeFirst.Data: Proyecto de tipo Biblioteca de Clases. Contendr el contexto a la base de datos (BBDD). AppEjemploEFCodeFirst.Data.Entities: Proyecto de tipo Biblioteca de Clases. Contendr las entidades, que darn lugar posteriormente a las tablas de la BBDD. 2. El siguiente paso ser agregar Entity Framework (EF), para ello utilizaremos el Administrador de Paquetes NuGet. EF ser agregado a dos de los tres proyectos: AppEjemploEfCodeFirst.Web AppEjemploEfCodeFirst.Data

3. Agregar las referencias necesarias: o o AppEjemploEfCodeFirst.Web debe hacer referencias a: AppEjemploEfCodeFirst.Data AppEjemploEfCodeFirst.Data.Entities

AppEjemploEfCodeFirst.Data debe hacer referencias a: AppEjemploEfCodeFirst.Data.Entities

4. Agregar la cadena de conexin a la base de datos, aunque es suficiente con agregarla al proyecto de datosAppEjemploEfCodeFirst.Data tambin es recomendable agregarlo al proyecto Web AppEjemploEfCodeFirst.Web. El fichero de configuracin (en mi caso) lucir as: <?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="CodeFirstDBContext" connectionString="server=.\SQLEXPRESS; database=AppEjemploEfCodeFirst; integrated security=true;" providerName="System.Data.SqlClient" /> </connectionStrings>

5. Crear la primera entidad POCO (cdigo primero), las entidades las creremos en el proyecto de entidades (AppEjemploEfCodeFirst.Data.Entities)
namespace AppEjemploEfCodeFirst.Data.Entities { public partial class Persona { public int PersonaId { get; set; } public string Nombre { get; set; } public string Apellidos { get; set; } public DateTime FechaNacimiento { get; set; } } }

6. Ahora crearemos la clase de contexto ( AppEjemploEfCodeFirstDbContext) en el proyecto (AppEjemploEfCodeFirst.Data) esta clase debe heredar de DbContex.
namespace AppEjemploEfCodeFirst.Data { public partial class AppEjemploEfCodeFirstDBContext : DbContext { public DbSet<Persona> Footballers { get; set; } } }

7. Ahora slo queda hacer uso del contexto y las entidades, para ello escribiremos en el Load de alguna pgina o en elController en el caso de usar MVC.
namespace AppEjemploEFCodeFist.Controllers { public class HomeController : Controller { public ActionResult Index() { var ctx = new AppEjemploEfCodeFirstDbContext();

ViewBag.LstPersonas = ctx.Personas.ToList(); return View(); } } }

8. Ya todo est listo, compilamos la aplicacin y la ejecutamos y en cuanto se haga referencia al contexto de datos veremos que se crea la base de datos con la estructuras de las clases o entidades (POCO) que creamos por cdigo.

Conclusiones: Hemos visto como mediante el uso de EF 5 podemos crear el cdigo de nuestras entidades en C# o VB.Net y posteriormente generar automticamente la base de datos. Pero qu pasa si agrego una nueva entidad o modifico una existente? para resolver este problema debemos habilitar las migraciones (EF Code First Migrations). Este tema lo veremos en un post posterior.

Artculos relacionados: EF Code First Migrations

EF Code First Migrations


Hace unos das escrib un articulo EF 5 Code First (Entity Framework Code First) que deberas leer antes que este. En aquel articulo explicaba como usar EF 5 Code First, en esta nueva entrada pretendo hablarles brevemente sobre: 1. 2. 3. EF Code First Migrations. Migraciones manuales. EF Code First Migrations. Migraciones automticas. EF Code First Migrations. Otras consideraciones.

EF Code First Migrations. Migraciones manuales.


EF Code First Migrations, no es otra cosa que habilitar la capacidad de actualizar la base de datos con los cambios realizados en nuestras entidades de cdigo (POCO) pero veamos un ejemplo. Sigamos con el mismo ejemplo del articulo anterior EF 5 Code First (Entity Framework Code First), en el que tenamos una entidad Persona:
namespace AppEjemploEfCodeFirst.Data.Entities { public partial class Persona

{ public int PersonaId { get; set; } public string Nombre { get; set; } public string Apellidos { get; set; } public DateTime FechaNacimiento { get; set; } } }

Imaginemos que deseamos agregar una nueva propiedad, por ejemplo . Numero de Documento, quedando as la nueva clase:
namespace AppEjemploEfCodeFirst.Data.Entities { public partial class Persona { public int PersonaId { get; set; } public string Nombre { get; set; } public string Apellidos { get; set; } public DateTime FechaNacimiento { get; set; } public string DocumentoNo { get; set; } } }

Si ejecutamos ahora la aplicacin, recibiramos un error como el siguiente:

Este error se debe a que no tenemos activada las migraciones ( EF Code First Migrations) que por defecto viene desactivada, al menos de las versiones 4.3 a la 5.0 de EF. Pero no hay que preocuparse, habilitarla es muy simple, veamos como: Pasos para habilitar EF Code First Migrations: 1. Ir al men Herramienta / Administrador de paquetes de biblioteca / Consola del Administrador de paquetes. 2. Estando en la consola (importantsimo) escoger el proyecto al cual queremos habilitarle la migracin (AppEjemploEfCodeFirst.Data). 3. Escribir el siguiente comando en la consola (Enable-Migrations) y presionar enter. Con esto hemos habilitado la migracin manual, mas adelante veremos la migracin automtica. Podrs observar que en el proyecto escogido para habilitarle la migracin (EF Code First Migrations) se ha creado una nueva carpeta (Migrations), aunque no es necesario puedes ojear un poco en los archivos creados para llevarte una idea de lo que esta sucediendo. 4. Escribir en la consola ( Add-Migration Migracion1Prueba) la palabra Migracion1Prueba es un nombre cualquiera para identificar la migracin. 5. Y por ultimo escribimos otro comando en la consola (Update-Database). Ya tendramos el modelo de base de datos actualizado con los cambios realizados en las entidades.

EF Code First Migrations. Migraciones automticas.


Entity Framework te brinda adems la posibilidad de que las migraciones se realicen de forma automtica, as nos ahorraramos el tener que ir a la Consola del Administrador de paquetes y escribir estos 2 comandos: Add-Migration Update-Database

Veamos como hacerlo: Primero debemos ir a la clase (Configuration) y modificar la siguiente lnea de cdigo del Constructor:
public Configuration() { AutomaticMigrationsEnabled = true; }

Despus debemos registrar el inicializador MigrateDatabaseToLatestVersion. Para ello escribimos el siguiente cdigo en el Global.asax, mtodo Application_Start (o cualquier otro punto de entrada de nuestra aplicacin);
Database.SetInitializer(new on>()); MigrateDatabaseToLatestVersion<AppEjemploEfCodeFirstDbContext, Configurati

Y con esto todo listo, ya puedes hacer cualquier modificacin en el cdigo (clases POCO) y despus de ejecutar la aplicacin, los cambios sern migrados a la base de datos. Consideraciones a tener en cuenta:

Puede que necesites cambiar el nivel de accesibilidad de la clase (Configuration) Puede que tengas que agregar algunos (Namespace) al Global.asax.

EF Code First Migrations. Otras consideraciones.


Puede que se te presenten ciertos escenarios donde no se apliquen las migraciones automticas. Por ejemplo cuando eliminas una columna o eliminas una entidad (tabla de datos). No se ha aplicado la migracin automtica porque podra ocasionar una prdida de datos. En estos casos tendrs (al menos hasta la versin actual) que forzar la migracin de forma manual, para ello escribirs el siguiente comando en la consola: Update-Database -Force -Verbose Existen adems algunos casos en los que no es suficiente, pongamos un ejemplo: Imagina que tienes una entidad con una propiedad (public long Id { get; set; }) y decides cambiar el tipo a entero (public int Id { get; set; }). En el caso anterior no basta con forzar la actualizacin. En este caso, mi consejo es que quites la entidad del modelo (o la propiedad) y fuerces la actualizacin ( Update-Database -Force Verbose), con esto se eliminar la tabla de datos, vuelves a incluir la entidad y nuevamente fuerzas la actualizacin para que cree la tabla con el nuevo tipo deseado.

Das könnte Ihnen auch gefallen