lunes, 20 de enero de 2014

[EntityFramework] Creando nuestra base de datos, basados en nuestro contexto

Luego de ver en nuestro anterior artículo Iniciando con Code First una introducción y un acercamiento a Entity Framework Code First, y de comprender su filosofía de trabajo, ahora vamos a ver cómo es su implementación y forma de trabajo, para esto vamos a iniciar con la creación de nuestras entidades de dominio las cuales nos servirán para toda nuestra serie de artículos de este enfoque de EF, y luego crearemos nuestro contexto, el cual como ya sabemos nos servirá para interactuar con nuestra base de datos.

En primera instancia vamos a crear dos entidades de dominio, las cuales en un escenario real de utilización de EF Code First podríamos partir de que dichas entidades ya existen, nuestras entidades serán Producto y Categoría y las vamos a crear dentro de un proyecto de tipo librería de clases el cual recibirá el nombre de Dominio.

   1:  public class Producto
   2:  {
   3:      public int Id { get; set; }
   4:   
   5:      public string Nombre { get; set; }
   6:   
   7:      public string Descripcion { get; set; }
   8:  }

   1:  public class Categoria
   2:  {
   3:       public int Id { get; set; }
   4:   
   5:       public string Nombre { get; set; }
   6:   
   7:       public string Descripcion { get; set; }
   8:  }

Perfecto esas clases tan simples serán las entidades de dominio con las que trabajaremos en nuestro ejemplo, ahora vamos a habilitar estas entidades para que a través de ellas podamos en primera instancia crear nuestra base de datos y posteriormente interactuar entre dominio y DB mediante el mapeo generado, para esto creamos un contexto el cual contenga propiedades de tipo DBSet<T> para cada entidad:

   1:  class Context : DbContext
   2:  {
   3:       public Context() : base("Productos")
   4:       {
   5:              
   6:       }
   7:   
   8:       public DbSet<Producto> Productos { get; set; }
   9:   
  10:       public DbSet<Categoria> Categorias { get; set; }
  11:  }

Y listo, con esto tenemos una infraestructura básica para lograr crear nuestra base de datos basados en las entidades de dominio que creamos, un aspecto a tener en cuenta en el contexto que acabamos de crear es que estamos pasando como parámetro al constructor el nombre que va a tener nuestra base de datos, y es importante especificar la cadena de conexión en el archivo app.config de nuestro proyeto, para tener los datos de conexión al servidor:

   1:  <connectionStrings>
   2:      <add name="ProductosDBConnectionString"
   3:      connectionString="Data Source=TAVOPC\SQLEXPRESS;Initial   Catalog=Productos;Integrated Security=true;"
   4:      providerName="System.Data.SqlClient"/>
   5:  </connectionStrings>

Y para terminar con nuestro ejemplo, vamos a crear en nuestra solución (.sln) un proyecto de tipo consola, en el cual probaremos si funciona correctamente nuestro contexto, para esto agregamos la referencia a nuestro proyecto de dominio, para poder acceder al contexto, hacemos el respectivo using y por ultimo copiamos este fragmento de código en el método main de la clase Program de nuestro proyecto de consola:

   1:  class Program
   2:  {
   3:          static void Main(string[] args)
   4:          {
   5:              using (var contexto = new Context())
   6:              {
   7:                  var producto = new Producto {Id = 1, Nombre = "Jabón", Descripcion = "Producto para el aseo del hogar" };
   8:                  contexto.Productos.Add(producto);
   9:                  contexto.SaveChanges();
  10:              }
  11:          }
  12:  }

Ahora ejecutamos para probar, y efectivamente vemos que se ha creado nuestra base de datos, con el nombre que indicamos en el constructor, tal cual con la estructura de nuestra entidades y además se ha agregado el producto que indicamos en la tabla Productos, como podemos observar si depuramos la primer vez que ejecutamos la app se demora un tiempo considerable en agregar el producto ya que en ese momento no existe la Db y por lo tanto se crea, pero en las ejecuciones que hagamos en adelante el tiempo será muy corto.

Bueno y con esto damos por terminado nuestro ejemplo de cómo crear nuestra base de datos basados en un contexto previamente creado, sin embargo surgen algunas dudas como: ¿Cómo se logran crear relaciones de diferentes tipos entre las tablas? ¿Cómo doy longitud a los campos de la tabla y demás características? pues bien en próximos artículos iremos profundizando y explicando estos temas, espero les sea de utilidad.

Saludos y buena suerte!

4 comentarios:

  1. Que tal amigo, paso a decirte que es excelente lo que estás haciendo y la calidad de los materiales.
    Y en este tuto, te quiero comentar que el nombre del StringConnection está mal ya que es "ProductosDBConnectionString" cómo lo definiste en el Web.config .
    Saludos y abrazo!

    ResponderEliminar
    Respuestas
    1. Hola amigo, muchas gracias por tus buenos comentarios y por leerme, el constructor del contexto tiene dos sobre cargas, una en la cual le podemos enviar la cadena de conexión y otra en la que se le envía el nombre que tendrá la base de datos y el toma la cadena de conexión por defecto en el Web o app.config, en este caso yo use la segunda sobre carga, pero es totalmente valido enviarle el nombre de la cadena de conexión como tu dices.

      Un abrazo y saludos!

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar