Personnalisation des objets (Entity Framework)
ADO.NET Entity Framework fournit des outils permettant de générer automatiquement une couche objet basée sur le fichier CSDL (Conceptual Schema Definition Language) d'un modèle EDM (Modèle de données d'entité). Ces classes de données peuvent être personnalisées à des degrés variables, selon les besoins de votre application. Vous pouvez également modifier vos propres classes de données personnalisées de façon à les utiliser avec un modèle EDM. Cela est utile lorsque vous mettez à niveau des classes de données à partir d'une application existante pour utiliser Entity Framework ou lorsque vous souhaitez plus de contrôle sur la manière dont les classes de données sont créées.
Extension des classes de données partielles
Les types définis dans un modèle EDM n'ont pas de méthodes associées comme les classes utilisées dans la programmation orientée objet. À la place, ils contiennent seulement des propriétés définies dans le modèle EDM. Vous pouvez ajouter des fonctionnalités aux objets en étendant les classes de données partielles générées. Lorsque des classes de données sont générées par les outils Modèle de données d'entité, elles sont implémentées en classes partielles. Une classe partielle fractionne la définition d'une classe sur deux fichiers sources, ou plus. Chaque fichier source contient une section de la définition de classe et toutes les sections sont combinées lorsque l'application est compilée. Pour plus d'informations, voir Partial (Visual Basic) ou partiel, Type (Référence C#).
Lorsque vous disposez de classes partielles, vous pouvez étendre ces classes à l'aide de méthodes et de propriétés personnalisées dans un fichier source séparé sans avoir à vous inquiéter de perdre cette personnalisation lorsque les fichiers générés seront actualisés. Pour plus d'informations, voir Procédure : personnaliser des objets de données générés (Entity Framework).
Logique métier personnalisée
Lorsque vous utilisez des classes de données générées, vous pouvez appeler une logique métier personnalisée au cours de certaines opérations Object Services, telles que la modification des propriétés ou des relations. Cette logique métier peut inclure la création d'une validation ou d'une journalisation supplémentaires lors de la modification de propriétés ou de l'appel de SaveChanges. Vous pouvez appeler la logique métier personnalisée en gérant les événements déclenchés par Object Services ou en définissant les méthodes partielles personnalisées qui sont appelées lorsque des propriétés sont modifiées.
Les événements et les méthodes ci-dessous sont utilisés pour appeler la logique métier personnalisée :
- méthodes partielles OnPropriétéChanging et OnPropriétéChanged
Une paire de méthodes partielles sur les classes de données générées qui sont appelées par Object Services lorsqu'une propriété est modifiée. Étendez ces méthodes dans des classes de données partielles pour implémenter le code qui est exécuté lorsqu'une propriété change. Pour plus d'informations, voir Procédure : exécuter la logique métier lors de la modification des propriétés (Entity Framework).
- Événement SavingChanges
Événement déclenché lorsque des modifications mises en cache dans le contexte de l'objet sont sur le point d'être enregistrées dans la source de données. Gérez cet événement pour implémenter la logique métier personnalisée au début d'une opération SaveChanges. Pour plus d'informations, voir Procédure : exécuter la logique métier lors de l'enregistrement de modifications (Entity Framework).
- Méthode OnContextCreated
Les outils Entity Data Model génèrent une méthode partielle OnContextCreated dans la classe qui représente l'élément EntityContainer pour le modèle et qui hérite de la classe ObjectContext. Cette méthode partielle est appelée chaque fois qu'une classe ObjectContext est instanciée. Implémentez cette méthode partielle dans votre code pour inscrire un gestionnaire pour l'événement SavingChanges. Pour plus d'informations, voir Procédure : exécuter la logique métier lors de l'enregistrement de modifications (Entity Framework).
- Événement AssociationChanged
Un événement déclenché lorsqu'une relation entre deux objets est modifiée. Gérez cet événement pour implémenter la logique métier personnalisée lorsqu'une relation est modifiée. Pour plus d'informations, voir Procédure : modifier les relations entre les objets (Entity Framework).
Classes de données personnalisées
Dans certains cas, la simple extension de classes partielles par l'ajout de méthodes et de propriétés risque ne pas offrir une souplesse suffisante. Considérez une application .NET Framework existante qui utilise ADO.NET pour charger des données à partir d'une base de données dans des objets CLR pour que l'application les utilise. Ces objets peuvent contenir des personnalisations et une logique métier précieuses qui doivent être préservées dans la couche objet. Ces personnalisations peuvent vous empêcher de migrer l'application vers l'utilisation d'Entity Framework. Vous pouvez également souhaiter disposer d'un contrôle supérieur sur vos types d'entité, outre la possibilité d'étendre les classes partielles générées.
La méthode recommandée pour utiliser les classes de données personnalisées avec un modèle EDM consiste à hériter de EntityObject. Si vous ne pouvez pas hériter de EntityObject ou si vous avez besoin de plus d'indépendance par rapport à l'infrastructure, Entity Framework fournit un jeu d'interfaces que vous pouvez implémenter pour utiliser des classes de données personnalisées avec un modèle EDM. Pour plus d'informations, voir Implémentation d'interfaces de classes de données personnalisées (Entity Framework). Lorsque vous utilisez des classes de données personnalisées, vous devez appliquer des attributs aux classes de données personnalisées et aux propriétés et notifier le contexte d'objet lors de la modification des propriétés.
Héritage à partir d'EntityObject
Les classes de données générées héritent de EntityObject ou de ComplexObject. Si vous devez utiliser des classes de données avec un modèle EDM, la méthode recommandée consiste à modifier vos classes de données pour hériter d'une de ces deux classes de base. De cette façon, les classes de données personnalisées bénéficient des fonctionnalités de suivi des modifications et de gestion des relations fournies par EntityObject.
Lorsque vous héritez de EntityObject et de ComplexObject, soyez conscient des points suivants :
Les noms des classes et des propriétés doivent correspondre aux noms des types d'entité et des propriétés définis dans le fichier CSDL (Conceptual Schema Definition Language) du modèle EDM. Si les noms ne correspondent pas, vous devez modifier les noms de vos classes de données et propriétés ou mettre à jour les noms dans le langage CSDL et le fichier MSL (Mapping Specification Language) associé. Pour plus d'informations, voir Procédure : personnaliser un modèle EDM (Entity Data Model) pour travailler avec des objets personnalisés (Entity Framework).
Pour chaque propriété du type d'entité défini dans le fichier CSDL, il doit exister une propriété associée dans la classe de données personnalisée. Une classe de données personnalisée peut avoir des propriétés supplémentaires qui ne correspondent pas aux propriétés définies dans le fichier CSDL.
Vous devez appliquer des attributs aux classes de données personnalisées et aux propriétés. Ces attributs fournissent un mappage explicite entre les objets et le langage CSDL. Pour plus d'informations, voir Attributs de mappage objet-entité (Entity Framework) et Procédure : mapper des objets personnalisés à des entités (Entity Framework).
Pour permettre à Object Services de suivre les modifications apportées aux objets personnalisés, vous devez signaler ces modifications dans un modèle spécifique en utilisant les méthodes de signalisation des modifications de EntityObject. Pour plus d'informations, voir Création de rapports de modifications dans les classes de données personnalisées (Entity Framework).
Les outils Entity Framework génèrent également des classes supplémentaires qui simplifient la programmation d'objets. Il est avantageux d'utiliser ce code avec les classes de données personnalisées. Pour plus d'informations, voir Procédure : utiliser Object Services avec des objets personnalisés (Entity Framework).
Lorsque vous héritez de EntityObject, les types complexes doivent être implémentés en héritant de ComplexObject. Pour plus d'informations, voir Objets de type complexe (Entity Framework).
L'exemple suivant définit la classe de données personnalisée Order, qui hérite de EntityObject :
<EdmEntityTypeAttribute(NamespaceName:="Microsoft.Samples.Edm", Name:="Order")> _
Public Class Order
Inherits EntityObject
[EdmEntityTypeAttribute(NamespaceName="Microsoft.Samples.Edm",Name="Order")]
public class Order : EntityObject
Pour plus d'informations, voir Procédure : hériter des classes de base EntityObject et ComplexObject (Entity Framework).
Dans cette section
Création de rapports de modifications dans les classes de données personnalisées (Entity Framework)
Implémentation d'interfaces de classes de données personnalisées (Entity Framework)
Voir aussi
Autres ressources
Object Services (Entity Framework)
Utilisation d'objets personnalisés (Tâches Entity Framework)