POCO en Entity Framework 4.0

La próxima versión de Entity Framework 4.0 permitirá la opción de trabajar con nuestras clases POCO. Ahora podremos desarrollar nuestras aplicaciones N-tiers reutilizando nuestros objetos en cualquiera de las capas, ya que estos serán objetos planos sin referencias algunas a Entity Framework.

Vamos a ver un pequeño ejemplo de cómo sería crear un modelo a partir de nuestras clases POCO, que podrían ser como estas:

EF_POCO1

Este modelo se ha generado con el diseñador de entidades (bien utilizando el método Model-First o el método Generar desde la base de datos). Las clases para estas entidades serían las siguientes:

   1: public class Customer

   2: {

   3:     public int Id { get; set; }

   4:     public String Name { get; set; }

   5:     public String Address { get; set; }

   6:     public IList<Contact> Contacts { get; set; }

   7: }

   1: public class Contact

   2: {

   3:     public int Id { get; set; }

   4:     public String Name { get; set; }

   5:     public String PhoneNumber { get; set; }

   6:     public Customer Customer { get; set; }

   7: }

Si vemos las propiedades de nuestro fichero edm (no de nuestro modelo), tenemos una nueva propiedad que nos permite especificar la herramienta que vamos a utilizar para generar nuestro código, por defecto utiliza EntityModelCodeGenerator.

EF_POCO2

Para poder utilizar nuestras propias clases POCO, tenemos que dejar vació el Custom Tool, para que no genere ningún código con el ObjectContext de Entity Framework.

Al especificar que no queremos que nos genere un ObjectContext, tendremos que crearlo nosotros, definiendo todas las colecciones que queremos utilizar en nuestras consultas.

Un ObjectContext podría ser el siguiente:

   1: public class ManagerEntities : ObjectContext

   2: {

   3:     private ObjectSet<nTierTest.Model.Contact> _contacts;

   4:     private ObjectSet<nTierTest.Model.Customer> _customers;

   5:  

   6:     public ManagerEntities()

   7:         : base("Name=ManagerEntities")

   8:     {

   9:         DefaultContainerName = "ManagerEntities";

  10:         ContextOptions.LazyLoadingEnabled = true;

  11:         _contacts = CreateObjectSet<nTierTest.Model.Contact>("ManagerEntities.Contact");

  12:         _customers = CreateObjectSet<nTierTest.Model.Customer>("ManagerEntities.Customer");

  13:     }

  14:  

  15:     public ObjectSet<nTierTest.Model.Contact> Contacts

  16:     {

  17:         get { return _contacts; }

  18:     }

  19:  

  20:     public ObjectSet<nTierTest.Model.Customer> Customers

  21:     {

  22:         get { return _customers; }

  23:     }

  24: }

Los nombres de las entidades las podemos ver en nuestro modelo, incluyendo el DefaultContainerName que lo tenemos en la propiedad Entity Container Name.

Con este contexto, podemos realizar consultas sobre nuestras entidades y nos devolveran colecciones de nuestras clases POCO.

   1: var context = new nTierTest.Data.ManagerEntities();

   2:  

   3: List<nTierTest.Model.Customer> customerList = (from c in context.Customers

   4:                                                select c).ToList();

   5:  

   6: var contacts = from c in context.Contacts

   7:                where c.Customer.Id == 1

   8:                select c;

Lo siguiente sería crear los métodos necesarios para añadir entidades al contexto, validadores para nuestras clases, etc.

   1: public void AddCustomer(nTierTest.Model.Customer customer)

   2: {

   3:     _customers.AddObject(customer);

   4: }

Aunque este es un ejemplo muy simple de como configurar POCO con Entity Framework, nos da una idea de las nuevas opciones que se nos abren para el desarrollo de nuestras aplicaciones.

 

Saludos a todos…

3 comentarios sobre “POCO en Entity Framework 4.0”

Deja un comentario

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