Requisitos para crear objetos proxy POCO (Entity Framework)

Entity Framework admite clases POCO (objetos CLR "antiguos"). Si desea habilitar la carga diferida para las entidades POCO y hacer que Entity Framework realice el seguimiento de los cambios en sus clases a medida que se producen, las clases POCO deberán cumplir los requisitos descritos en este tema de modo que Entity Framework pueda crear objetos proxy para las entidades POCO en tiempo de ejecución. Las clases proxy se derivan de los tipos POCO.

Requisitos de definición de clases

Entity Framework crea objetos proxy para las entidades POCO si las clases cumplen los requisitos descritos a continuación. Las entidades POCO pueden tener objetos proxy que admiten seguimiento de cambios o carga diferida. Puede tener objetos proxy de carga diferida sin cumplir los requisitos para los proxys de seguimiento de cambios, pero si cumple los requisitos de proxys de seguimiento de cambios, también se creará el proxy de carga diferida. Puede deshabilitar la carga diferida estableciendo la opción LazyLoadingEnabled en false.

Para crear cualquiera de estos proxys:

  • Se debe declarar una clase de datos personalizada con acceso público.

  • Una clase de datos personalizada no debe ser sealed (NotInheritable en Visual Basic)

  • Una clase de datos personalizada no debe ser abstract (MustInherit en Visual Basic)

  • Una clase de datos personalizada debe tener un constructor public o protected sin parámetros. Utilice un constructor protected sin parámetros si desea utilizar el método CreateObject para crear un proxy para la entidad POCO. Al llamar al método CreateObject, no se garantiza la creación del proxy: la clase POCO debe cumplir los otros requisitos que se describen en este tema.

  • La clase no puede implementar interfaces IEntityWithRelationships o IEntityWithChangeTracker, ya que las clases proxy implementan estas interfaces.

  • La opción ProxyCreationEnabled se debe establecer en true.

Para los proxys de carga diferida:

  • Cada propiedad de navegación se debe declarar como public, virtual (Overridable en Visual Basic), y no descriptor de acceso get sealed (NotOverridable en Visual Basic). La propiedad de navegación definida en la clase de datos personalizada debe tener una propiedad de navegación correspondiente en el modelo conceptual. Para obtener más información, vea Cargar entidades POCO relacionadas (Entity Framework).

Para proxys de seguimiento de cambios:

  • Cada propiedad asignada a una propiedad de un tipo de entidad en el modelo de datos debe tener descriptores de acceso set y get no sealed(NotOverridable en Visual Basic), public y virtual (Overridable en Visual Basic).

  • Una propiedad de navegación que representa el extremo "varios" de una relación debe devolver un tipo que implemente ICollection, donde T es el tipo del objeto en el otro extremo de la relación.

  • Si desea crear el tipo proxy junto con el objeto, utilice el método CreateObject sobre el ObjectContext al crear un nuevo objeto, en lugar del operador new.

Si durante la ejecución necesita saber si una entidad POCO es un proxy, siga los pasos descritos en Cómo: Identificar que una entidad POCO es un proxy (Entity Framework).

Vea también

Tareas

Tutorial: Serializar objetos proxy POCO con WCF (Entity Framework)

Conceptos

Trabajar con entidades POCO (Entity Framework)
Realizar el seguimiento de los cambios en entidades POCO (Entity Framework)