Spécifications pour la création de proxys POCO (Entity Framework)

Entity Framework prend en charge des classes POCO (objets CLR « traditionnels »). Si vous souhaitez autoriser le chargement différé des entités POCO et laisser Entity Framework suivre les modifications dans vos classes lorsqu'elles se produisent, vos classes POCO doivent satisfaire aux conditions décrites dans cette rubrique afin que Entity Framework puisse créer des proxys pour vos entités POCO au moment de l'exécution. Les classes proxy dérivent de vos types POCO.

Conditions relatives à la définition des classes

Entity Framework crée des proxys pour les entités POCO si les classes satisfont les conditions décrites ci-dessous. Les entités POCO peuvent avoir des objets proxy qui prennent en charge le suivi des modifications ou le chargement différé. Vous pouvez avoir des proxys de chargement différé sans satisfaire aux conditions relatives aux proxys de suivi des modifications, mais si vous remplissez les conditions du proxy de suivi des modifications, le proxy de chargement différé sera créé également. Vous pouvez désactiver le chargement différé en attribuant à l'option LazyLoadingEnabled la valeur false.

Pour que l'un ou l'autre de ces proxys soit créé :

  • Une classe de données personnalisée doit être déclarée comme publiquement accessible.

  • Une classe de données personnalisée ne doit pas être sealed (NotInheritable en Visual Basic)

  • Une classe de données personnalisée ne doit pas être abstract (MustInherit en Visual Basic).

  • Une classe de données personnalisée doit avoir un constructeur public ou protected qui n'a pas de paramètres. Utilisez un constructeur protected sans paramètres si vous souhaitez utiliser la méthode CreateObject pour créer un proxy pour l'entité POCO. Le fait d'appeler la méthode CreateObject ne garantit pas la création du proxy : la classe POCO doit remplir les autres conditions décrites dans cette rubrique.

  • La classe ne peut pas implémenter les interfaces IEntityWithChangeTracker ou IEntityWithRelationships parce que les classes proxy implémentent ces interfaces.

  • L'option ProxyCreationEnabled doit être définie sur true.

Pour les proxys de chargement différé :

  • Chaque propriété de navigation doit être déclarée en tant que public, virtual (Overridable en Visual Basic), et pas en tant qu'accesseur get sealed (NotOverridable en Visual Basic). La propriété de navigation définie dans la classe de données personnalisée doit avoir une propriété de navigation correspondante dans le modèle conceptuel. Pour plus d'informations, consultez Chargement d'entités POCO connexes (Entity Framework).

Pour les proxys de suivi des modifications :

  • Chaque propriété mappée à une propriété d'un type d'entité dans le modèle de données doit avoir des accesseurs set et get public et virtual (Overridable en Visual Basic) non scellés (NotOverridable en Visual Basic).

  • Une propriété de navigation qui représente la terminaison « many » d'une relation doit retourner un type qui implémente ICollection, où T est le type de l'objet à l'autre terminaison de la relation.

  • Si vous souhaitez que le type de proxy soit créé avec votre objet, utilisez la méthode CreateObject sur le ObjectContext au lieu de l'opérateur new, lorsque vous créez un objet.

Si, au moment de l'exécution, vous souhaitez savoir si une entité POCO est un proxy, suivez les étapes décrites dans Procédure : déterminer si une entité POCO est un proxy (Entity Framework).

Voir aussi

Tâches

Procédure pas à pas : sérialiser des proxys POCO avec WCF (Entity Framework)

Concepts

Utilisation d'entités POCO (Entity Framework)
Suivi des modifications dans les entités POCO (Entity Framework)