Tipos Complejos en el EDM Designer de Visual Studio 2010

Una de las mejoras que se han incluido en el diseñador de entidades de Visual Studio 2010 para Entity Framework, es el soporte para crear y modificar los Complex Types (Tipos Complejos). Los Complex Types son una de las grandes características de Entity Framework, que si bien podíamos incluirlas en la versión EF1, si utilizábamos esta característica no podíamos acceder al modelo con el diseñador de Visual Studio 2008.

Visual Studio 2010 nos permite diseñar nuestro modelo EDM incluyendo estos tipos complejos, veamos un ejemplo.

Imaginemos que tenemos una entidad Empresa con las propiedades Calle, Numero, Planta, Localidad y Provincia. Queremos encapsular estas propiedades en una única propiedad compleja llamada Direccion.

Con el nuevo diseñador de Visual Studio 2010 podemos refactorizar estas propiedades y convertirlas en el tipo complejo que queramos.

ComplexType1[1]

ComplexType2[1]

El diseñador se encarga de enlazar las nuevas propiedades a su correspondiente campo en la tabla. La propiedad Direccion.Calle se enlaza con el campo Calle en la tabla y así sucesivamente con las demás propiedades que conforman el Complex Type.

 ComplexType3[1]

Cuando actualizamos una de las propiedades de un Complex Type, Entity Framework actualiza todas las propiedades del Complex Type y no sólo la que hemos cambiado. Por ejemplo:

   1: using (var context = new ClientesModelContainer())

   2: {

   3:     var empresa1 = (from p in context.EmpresaSet

   4:                    where p.Id == 1

   5:                    select p).FirstOrDefault();

   6:  

   7:     empresa1.Direccion.Calle = "Actualizacion Calle 1";

   8:     

   9:     context.SaveChanges();

  10: }

y revisamos la consulta que se ejecuta en el SaveChanges, podemos ver que se actualizan todos los campos del Complex Type.

   1: update [dbo].[EmpresaSet]

   2: set [Direccion_Calle] = @0, 

   3:     [Direccion_Numero] = @1, 

   4:     [Direccion_Planta] = @2, 

   5:     [Direccion_Localidad] = @3, 

   6:     [Direccion_Provincia] = @4

   7: where ([Id] = @5)

Por el contrario, si actualizamos cualquiera de las otras propiedades que no pertenecen al Complex Type,

   1: empresa1.Nombre = "Nombre de Empresa 1";

   2:  

   3: context.SaveChanges();

el resultado es una consulta SQL con los campos que se quieren actualizar.

   1: update [dbo].[EmpresaSet]

   2: set [Nombre] = @0

   3: where ([Id] = @1)

Importante tener en consideración el comportamiento de las consultas que se ejecutan al actualizar una entidad con un Complex Type, aunque no por esta peculiaridad debemos de dejar de modelar nuestras entidades con estos tipos complejos. Gracias a ellos ganamos en simplicidad en nuestro modelo.

Saludos a todos…

Un comentario sobre “Tipos Complejos en el EDM Designer de Visual Studio 2010”

Responder a jsosa Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *