14 de enero de 2013

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 pequeña entrada sobre su uso.

Dividiremos la serie en al menos 2 artículos:

  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 aplicación de ejemplo (AppEjemploEfCodeFirst) que contendrá 3 proyectos:

Captura0

  • 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 darán 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


Captura


3. Agregar las referencias necesarias:

  • 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 conexión a la base de datos, aunque es suficiente con agregarla al proyecto de datos AppEjemploEfCodeFirst.Data también es recomendable agregarlo al proyecto Web AppEjemploEfCodeFirst.Web. El fichero de configuración (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 (código primero), las entidades las creáremos 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 sólo queda hacer uso del contexto y las entidades, para ello escribiremos en el Load de alguna página o en el Controller 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();

        }

    }

}

image8. Ya todo está listo, compilamos la aplicación 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 código.

 

Conclusiones: Hemos visto como mediante el uso de EF 5 podemos crear el código de nuestras entidades en C# o VB.Net y posteriormente generar automáticamente 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.

 

Artículos relacionados:

3 comentarios:

  1. Interesante el articulo, estoy iniciando a ver todo sobre EF, por que no pone el código del articulo.

    ResponderEliminar