Primera aplicacion con Entity Framework

Hola, ya que conocemos las bases de lo que nos trae Entity Framework empecemos con una aplicacion para mostrar su potencial y funcionamiento.

-Modelo en base de datos

Lo primero que necesitamos como prerequisito es tener una base de datos, en mi caso una en SQL Server con la siguiente estructura:

-Creando nuestro Modelo conceptual

Lo primero es abrir la mejor IDE del mundo, nuestro Visual Studio 2010 😀 . Archivo, nuevo, proyecto y seleccionamos un proyecto del tipo aplicación de Consola. Ahora bien, algo que se debe tener en cuenta antes de seguir, es que un modelo de Entity Framework es n elemento y NO un tipo de proyecto, por esto el siguiente paso sera agregar un nuevo elemento a nuestro proyecto de Consola, Click derecho, agregar, nuevo elemento, en la categoría Data seleccionamos el tipo ADO.NET Entity Data Model:

Al pulsar Add, nos saldrá un asistente de conexión. En la primera se nos da la opción de crear un modelo conceptual a partir de un modelo de base de datos, y la otra crear un modelo vacío que luego podremos enviar a una base de datos, esto es lo que se conoce como Model First [no lo cubriremos en esta entrada]. la técnica que usaremos en esta entrada se conoce como Database First.

En esta ventana especificamos la conexión a la base de datos donde estará nuestro modelo físico, en  mi caso quedaría así:

Pulsamos “ok” y terminamos de configurar la creación del EDMX.

Como vemos, el wizard ya nos ha proporcionado un nombre para el Entity connection y ademas no pregunta si deseamos incluir el Usuario y la contraseña de la conexión la cadena de conexión, podríamos (por seguridad) dejarla por separado en el mismo archivo de configuración ENCRIPTADA, pero en este caso a manera de ejemplo le diremos que si incluya esta información y pulsaremos siguiente.

El Siguiente y ultimo paso es seleccionar que elementos de nuestro modelo físico deseamos traer a nuestro modelo conceptual, se nos dan las opciones de Pluralizar o singularizar estos elementos, por lo general los trabajo de modo Singular desde que están en la  base de datos. Otra opción que nos da es de incluir las llaves foráneas en nuestro modelo y dar un nombre al espacio de nombres del modelo:

Una vez pulsamos “finish” veremos una característica muy buena de Visual Studio 2010, el Entity Model Designer con las entidades que se han creado a partir de el modelo físico que teníamos en la base de datos. y ademas de este, Visual Studio 2010 integra otra fascinante herramienta que nos facilita el trabajo en proyectos con muchas entidades, el Model Browser, se vera algo como:

– Explorando nuestro Modelo Conceptual

Antes de continuar seria bueno fijarnos en ciertas cosillas, la primera que podemos notar es que Entity Framework nos ha agregado automáticamente un archivo de configuración y en su interior nos ha agregado un Connection String con una forma muy peculiar, algo como:

add name="EFDemoEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=.;
initial catalog=EFDemo;user id=sa;password=****;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient"

Si nos fijamos detenidamente vemos que en esta se define varios atributos, el primero y muy importante es el de metadata quien es el que define de que se compondrá nuestro edmx, por supuesto de los tres archivos XML de los que hablamos en el post anterior (CSDL, SSDL y MSL), El siguiente atributo es el proveedor especifico con el que realizamos esta conexión (en mi caso es el SQLClient), el Servidor donde se encuentra la BD, la BD, el usuario y contraseña, la propiedad multipleactiveresultsets que nos indica si se pueden asociar varios conjuntos de resultados activos a la conexión asociada. y por ultimo tenemos el providerName que como ya habíamos dicho en el post anterior el provider de Entity Framework se llama EntityClient. Otro aspecto importante a resaltar es que se ha agregado una referencia al ensamblado System.Data.Entity.

– Consumiendo nuestro Modelo Conceptual:

Ahora que tenemos un poco mas claro el porque de los estragos que ha causado nuestro modelo en la apariencia de la solución, podemos empezar a picar código.

En el método main de nuestra app agregaremos una sentencia using (porque es auto-administrable ,etc, etc) y dentro  de este creamos una instancia de nuestro modelo, así:

class Program
{
        static void Main(string[] args)
        {
            using (EFDemoEntities context = new EFDemoEntities())
            {

            }
        }
}

-Agregando datos con Entity Framework:

Como dije en el primer post de esta serie, Entity Framework nos ahorra el tener que mapear a mano nuestras entidades a entidades de dominio, y expone automáticamente muchos métodos que ayudan a las operaciones CRUD.

Para agregar un elemento a la entidad Pais, debemos crear un objeto de este tipo, agregarlo al contexto y guardar los cambios, así:

class Program
{
        static void Main(string[] args)
        {
            using (EFDemoEntities context = new EFDemoEntities())
            {
                context.Pais.AddObject(new Pais{Nombre = "Colombia"});
                context.SaveChanges();
            }
        }
}

Entity Framework detecta si un campo es Autonumerico, es por esto que NO es necesario setearle un valor numérico a la propiedad Id.

Ahora bien si quisiéramos agregar un objeto HIJO es decir, una ciudad, podemos usar las propiedades de navegación que nos da Entity Framework cuando detecta llaves foráneas, así que seria cuestión de definir un valor a esta propiedad, así:

class Program
{
        static void Main(string[] args)
        {
            using (EFDemoEntities context = new EFDemoEntities())
            {
                Pais pais = new Pais { Nombre = "Bolivia" };
                Ciudad ciudad = new Ciudad{Nombre = "La Paz"};
                pais.Ciudad.Add(ciudad);
                context.Pais.AddObject(pais);
                context.SaveChanges();
            }
        }
}

-Eliminando datos con Entity Framework:

Para eliminar un dato con Entity Framework, es necesario primero recuperarlo y luego si eliminarlo, algo así:

class Program
{
        static void Main(string[] args)
        {
            using (EFDemoEntities context = new EFDemoEntities())
            {
                Pais pais = (from p in context.Pais
                             where p.Nombre == "Colombia"
                             select p).FirstOrDefault();
                context.Pais.DeleteObject(pais);
                context.SaveChanges();
            }
        }
}

En el escenario anterior, eliminamos un objeto “padre” que no tenia “hijos”, es un escenario sencillo pero nos sirve para entender y/o conocer la sintaxis de Linq por ejemplo y nos sirve para notar ademas, que siempre que se realice un cambio, si se desea ver reflejado en base de datos es necesario acudir al método SaveChanges().

Un escenario como el del segundo objeto que agregamos, que tiene un hijo (País – Ciudad) se requiere eliminar todos sus hijos y luego si finalmente el Padre, de lo contrario obtendremos una excepción. Otra alternativa, es habilitar la eliminación en cascada, se puede hacer directamente sobe la relación de las tablas en la base de datos o evaluar lo que en esta liga se propone.

– Editando datos con Entity Framework:

Para editar un elemento, se sigue un procedimiento similar al que seguimos para eliminarlo, lo recuperamos, modificamos la propiedad que  deseamos y SIN AGREGARLO al contexto, guardamos los cambios, así:

static void Main(string[] args)
{
            using (EFDemoEntities  context = new EFDemoEntities ())
            {
                Pais pais = (from p in context.Pais
                            where p.Nombre == "Colombia"
                            select p).FirstOrDefault();
                pais.Nombre = "ColombiaEditada";
                context.SaveChanges();
            }
}

Espero les sea de utilidad esta serie de post de Entity Framework.

Hasta el próximo post.

Anuncios
Primera aplicacion con Entity Framework

6 comentarios en “Primera aplicacion con Entity Framework

  1. Hola ! Primero quiero agradecer por el post es muy instructivo, pero tengo una duda, si la clase Pais la crea automaticamente, donde definis o como definis el contructor para que te acepte el nombre?

    Desde ya muchas gracias!

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