Entity Framework Code First Parte I

Bueno amigos ya tenia tiempo que no postea nada pero me estaba documentando y hoy vengo a poner algo de lo que he aprendido a lo largo de esta semana en esta ocasión hablaremos de Code First primero algo de teoría:


¿Que es Code First?

Code First es un nuevo enfoque de trabajo que aparece en el Entity Framework a partir de las versión 4.1, que nos permite crear nuestro modelo mediante clases POCO (Plain Old CLR Object), a partir de las cuales se generará nuestro modelo de base de datos. Otra característica es que en este modelo no existe el fichero edmx de definición del modelo (conceptual y de datos).

mas información en Diario de un desarrollador 


Requisitos

Para poder trabajar con Code First es necesario usar la versión 4.1 (o superior) de Entity Framework

Para descargar e instalar esta versión la mejor alternativa es utilizar NuGet Gallery. Para eso en nuestro Visual Studio vamos a Herramientas > Library Package Manager > Package Manager Console. Con esto se nos abrirá una consola

ennt

Echo esto se abrirá una consola donde teclearemos:

Install-Package EntityFramework -Version 4.3.1  

ennt
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Esto es con lo que respecta a Visual Studio ya que se entiende que al hacer una aplicación de acceso a datos se necesita un motor de Base de Datos en está ocasión usaremos SQL Server pero recordemos que Entity Framework no se limita a ese motor si no que Podemos usar otros gestores como MySQL, Db2 entre otros.

Una vez que tenemos todo esto lo que sigue seria :

1.- Abrir Visual Studio y crearemos un proyecto de tipo Librería (Class Library) al cual le pondremos por nombre Entidades aquí almacenaremos todas nuestra entidades que después se convertirán en tablas de nuestra base de datos.

En este caso se ejemplificara la relacione de  Libros y Autores por lo que procederemos a crear nuestra clase Autor que se encuentra definida como sigue:

 

public class Autor
    {
        //Propiedades
        //se convertira en Primary Key
        public int ID { get; set; }
        public string Nombre { get; set; }

        //Propiedad de Navegacion
        public virtual ICollection<Libro> Libros { get; set; }
    }

Como se puede observar la propiedad ID se convertirá en llave primaria debido a que Entity Framework ocupa la primera propiedad que se declara de tipi int, Long como Primary key.

También se ilustra una propiedad de tipo virtual de tipo ICollection<Libro> la cual es una propiedad de navegación esto quiere decir que si en algún  momento quisiéramos obtener los libros en base al Autor ocuparíamos esta propiedad.

Y también se definirá nuestra siguiente Entidad que será la case Libro  :

public class Libro
 {
     public int LibroId { get; set; }
     public string Nombre { get; set; }
     public string Recomendable { get; set; }

     //Foraign Key
     public int AutorId { get; set; }

     //Navegacion
     public virtual Autor AutorAsignado { get; set; }

 }

Aquí se ve como se crea una llave foránea(foreing key) esta nos permitirá tener una relación entre Entidades en este caso con la Entidad Autor.

Una vez que ya tenemos definidas nuestra Entidades POCO (las clases que se crearon anteriormente).

Agregaremos a nuestra solución otro proyecto dentro Class Library(biblioteca de clases) y la llamaremos Datos.

Aquí definiremos nuestra base de datos par ello agregaremos una clase ala que pondremos por nombre CFLibrioteca (pueden usar otro)  algo importante es que el nombre de esta clase sera el nombre de  nuestra base de Datos.

Y se definirá de la siguiente manera:

Algo importante es que Visual Studio por defecto nos carga Entity Framework 4..0 por lo que deberíamos de aplicar el procedimiento que se describió al principio para actualizar a la versión 4.1 o posterior.

Verificamos que en el apartado de referencias se encuentre la Libreria EntityFramework que es la que nos permitira definir nuestr contexto y nuestra tablas:

public class CFLibrioteca : DbContext
{
    public DbSet<Libro> Libros { get; set; }
    public DbSet<Autor> Autores { get; set; }
}

DbContext representa una combinación de los patrones de unidad de trabajo y el repositorio y permite consultar una base de datos y agrupar los cambios que a continuación se escribirán de nuevo al almacén como una unidad. DbContext es conceptualmente similar a ObjectContext.

DBSet Representa un conjunto de entidades que se utiliza para realizar operaciones de creación, lectura, actualización y eliminación.

Con esto ya definimos nuestro esquema de nuestra base de datos procederemos a probar si funciona Guiño

Para eso agregaremos un nuevo proyecto de tipo Console Application(aplicación de consola) la cual se llamara Prueba

Antes que nada debemos agregar las referencias a Entidades y a EntityFramework para que todo funcione bien.

static void Main(string[] args)
        {
            CFLibrioteca context = new CFLibrioteca();

            #region Autores
            Autor Amaro = new Autor
            {
                Nombre = "Abel Amaro Julian"
            };

            context.Autores.Add(Amaro);
            context.SaveChanges();

            Console.WriteLine("Se registro el Autor {0}", Amaro.Nombre);

            Autor Jose = new Autor
            {
                Nombre = "Jose cruz Romero"
            };
            Console.WriteLine("Se registro el Autor {0}", Jose.Nombre);

            context.Autores.Add(Jose);
            context.SaveChanges();
            #endregion

            #region Libros
            Libro EntityF40 = new Libro
            {
                Nombre = "Entity Framework 4.0 =)",
                AutorId = Amaro.ID
            };

            context.Libros.Add(EntityF40);
            context.SaveChanges();

            Libro DiseñoWeb = new Libro
            {
                Nombre = "Diseño web para dummies",
                AutorId = Jose.ID
            };

            context.Libros.Add(DiseñoWeb);
            context.SaveChanges();
            #endregion

            Console.WriteLine("Libro {0} Nombre{1} ", EntityF40.LibroId, EntityF40.Nombre);
            Console.WriteLine("Libro {0} Nombre{1} ", DiseñoWeb.LibroId, DiseñoWeb.Nombre);

            Console.WriteLine("presine <enter> para continuar ");
            Console.ReadLine();

        }

Aquí inicialmente se crea un crea un objeto de tipo CFLibrioteca que es el tipo que definimos anteriormente que sera nuestro contexto crearemos un objeto Autor el cual se agregara al contexto de la siguente forma :

context.Autores.Add(Amaro);

context.SaveChanges();

se creara un objeto de tipo Libro el cual también se agrega al contexto :

Libro EntityF40 = new Libro
          {
              Nombre = "Entity Framework 4.0 =)",
              AutorId = Amaro.ID
          };

          context.Libros.Add(EntityF40);
          context.SaveChanges();

aquí se ilustra como se ocupa la llave foránea para relacionar los libros con sus autores.

una vez realizado esto solo nos falta agregar a nuestro proyecto un archivo de configuración donde se definirá la cadena de conexión que se empleara :

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="CFLibrioteca"
         connectionString="Data Source=.\SQLEXpress;  Integrated Security=true;
 initial catalog=CFLibrioteca; multipleactiveresultsets=True"
         providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

y eso seria todo ahora ejecutamos nuestra aplicación

image

Y vericamos en nuestr SQl

qwer

Y hasta aqui el fin .

Pues esto solo es un ejemplo de lo mas sencillo en el cual no se emplean las mejores practicas de programación  ni los mejores patrones de diseño pero la idea es dar a conocer en la forma en la que yo lo entendí lo que es el enfoque Code First .

Gracias amables lectores por leer mis artículos en próximos post veremos el uso de Entity framework con LINQ y demás gracias,

Agradecimientos especiales a Samuel Arellano por compartir su conocimiento con la comunidad

sigueme en Twitter (@jumaroz) Risa

Anuncios

Acerca de amarotux

Ingeniero en Sistemas Computacionales del Instituto Tecnologico Superior de Huauchinago; Me gusta el desarrollo los videojuegos las tecnologías Open Source desarrollador Fre-Lance @jumaroz

Publicado el 19 de julio de 2012 en ADO. Net, C# .Net y etiquetado en , , . Guarda el enlace permanente. 2 comentarios.

  1. oHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

  2. Bien… muy bien. Me sirve.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: