03 enero, 2010

Entity Framework

El último proyecto en el que estamos trabajando consiste, a grandes rasgos, en el desarrollo de un aplicativo a medida con presentación web, tecnologia ASP.NET 3.5, bajo una arquitectura 3 capas y una vertical en forma de fachada en la que definimos toda la sintaxis de los esquemas que se utilizaran en el sistema.

¿Qué es?

La capa de acceso a datos se realiza a través de Entity Framework. Es una plataforma pensada para abstraer el esquema de base de datos y redefinirlo para ser visualizado desde nuestra capa de negocio como un modelo conceptual de "diseño".

La idea es realmente buena, aunque no está suficientemente depurada. Hay funcionalidades como que una columna sea FK y PK a la vez, que no se nos permitirá realizar.

Permite explicitar la herencia, las referecias de * a * o las 1 a * sin ningún problema.

Es muy interesante para modelos "simples" que cada una de sus tables se identifiquen por un PKID, no por claves compuestas y referenciadas a la vez.

Otro punto a mejorar es la actualización de cambios en la base de datos. El refresco es automático, pero te deshace cualquier asociación que hayas modificado en el modelo, tras la importación.

Ello dificulta mucho la actualización de estructura de BBDD al modelo EDMX (Entity Framework).

Cabe decir que el modelo EDMX no es más que un XML, que mapea y genera relaciones entre las entidades.

¿Qué ventajas ofrece?

A parte de las mencionadas anteriormente, la má simportante es que nos ofrece un canal vía LINQ para el acceso a los objetos y sus relaciones, como si de la navegación dentro de un OO se tratara. Simplemente con:

context.AddToClient(account);

context.SaveChanges();

puedo grabar una entidad cliente. A fin y al cabo, no deja de ser LINQ que va por detrás. Lo más interesante es que del "client" que acabo de guardar antes, puedo, por ejemplo:

List contactsClient = account.Contacts.TransformToIContact();

convertir las referencias del cliente, a Entidades de mi modelo de objetos.

Es una herramienta interesante para abstraer una relación N - N, dado que si trabajaramos directamente sobre la base de datos, deberíamos mantener nosotros la tabla intermedia que proporciona la carinalidad N - N.

Con Entity Framework, de eso nos libramos.

Modelo EDMX en VS 2008:

No hay comentarios: