Partager via


Modèle Générateur d'entité de suivi automatique ADO.NET

Cette rubrique fournit une vue d'ensemble du modèle Générateur d'entité de suivi automatique ADO.NET inclus dans Visual Studio 2010. Elle indique également comment personnaliser le modèle de texte. Le modèle Générateur d'entité de suivi automatique ADO.NET génère le code de couche objet qui se compose des objets ObjectContext typés et des classes d'entité qui contiennent la logique de l'état de suivi automatique. Utilisez les entités de suivi automatique lorsque vous travaillez avec des applications multicouches. Pour plus d'informations, consultez Working with Self-Tracking Entities et Walkthrough: Serialize Self-Tracking Entities.

Le modèle Générateur d'entité de suivi automatique ADO.NET se compose de deux fichiers de modèle de texte : <nom du modèle>.tt et <nom du modèle>.Context.tt. Le modèle <nom du modèle>.Context.tt génère l'objet ObjectContext typé. Le modèle <nom du modèle>.tt génère les types d'entité de suivi automatique.

Ces deux modèles de texte commencent par des directives intégrées qui indiquent au moteur de traitement du modèle de texte comment traiter le modèle. Notez que les modèles de texte incluent le fichier .ttinclude. Le fichier .ttinclude contient des classes utilitaires qui assistent les modèles ADO.NET dans le processus de génération de code. Pour plus d'informations sur le fichier .ttinclude, consultez Fichier utilitaire .ttinclude Entity Framework.

<#@ template language="VB" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.VB.ttinclude"#>
<#@ output extension=".vb"#>
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>

Le code instancie et initialise ensuite les classes d'assistance définies dans le fichier .ttinclude.

Dim code As New CodeGenerationTools(Me)
Dim ef As New MetadataTools(Me)
Dim loader As New MetadataLoader(Me)
Dim region As New CodeRegion(Me)

Dim fileManager As EntityFrameworkTemplateFileManager = EntityFrameworkTemplateFileManager.Create(Me)
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataTools ef = new MetadataTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this);

EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);

Le code initialise également la chaîne inputFile. Si vous déplacez les modèles du projet qui contient le fichier .edmx dans un autre projet, vous devez modifier la chaîne inputFile en fonction de l'emplacement relatif du fichier .edmx.

Dim inputFile As String = "SchoolModel.edmx"
string inputFile = @"SchoolModel.edmx";

Les deux sections suivantes traitent des caractéristiques de ce qui est généré par chaque fichier .tt.

<nom du modèle>.Context.tt

Le fichier <nom du modèle>.Context.tt génère deux fichiers sources. Les fichiers sources s'affichent sous le fichier <nom du modèle>.Context.tt dans l'Explorateur de solutions.

  • Fichier nommé <nom du modèle>.Context.cs (ou vb). Le code source généré contient la définition de la classe ObjectContext typée. La définition inclut les éléments suivants :

    • Surcharges de constructeur. Les constructeurs affectent la valeur false à la création de proxy et enregistrent l'objet ObjectMaterializedEventHandler. Pour plus d'informations sur les objets POCO (objets CLR « classiques ») et proxy, consultez Working with POCO Entities.

    • Propriétés ObjectSet.

    • Méthodes d'importation de fonction (si définies dans le modèle conceptuel).

  • Fichier nommé <nom du modèle>.Context.Extensions.cs (ou vb). Le fichier source généré contient deux méthodes d'extension ApplyChanges (une pour ObjectContext et l'autre pour ObjectSet), ainsi que des méthodes privées qui prennent en charge la méthode ApplyChanges. La méthode ApplyChanges examine les informations de suivi des modifications contenues dans le graphique des entités de suivi automatique et déduit l'ensemble des opérations à effectuer pour refléter les modifications dans la base de données.

<nom du modèle>.tt

Le modèle <nom du modèle>.tt génère plusieurs fichiers sources. Les fichiers sources s'affichent sous le fichier <nom du modèle>.tt dans l'Explorateur de solutions.

  • Fichier nommé <nom du modèle>.cs (ou .vb), qui contient les éléments suivants :

    • Définition de la classe d'assistance ObjectChangeTracker. Une instance ObjectChangeTracker contient et assure le suivi des informations sur toutes les modifications apportées aux types qui implémentent IObjectWithChangeTracker. ObjectChangeTracker fait partie du contrat de données des objets de suivi automatique ; il est par conséquent sérialisé avec eux.

    • Définition de l'interface IObjectWithChangeTracker. L'interface est implémentée par les entités de suivi automatique et contient une propriété en lecture seule unique pour récupérer l'objet ObjectChangeTracker pour une entité.

    • Méthodes d'extension définies pour les types IObjectWithChangeTracker qui permettent la manipulation de l'état d'entité par le biais de l'objet ObjectChangeTracker. Voici la liste des méthodes d'extension : MarkAs[State], StartTracking, StopTracking et AcceptChanges. Pour plus d'informations sur ce que fait chaque méthode d'extension, consultez Working with Self-Tracking Entities.

    • Définition pour TrackableCollection de T qui dérive de ObservableCollection. Chaque entité qui a des propriétés de navigation de collection inscrit un gestionnaire pour l'événement CollectionChanged sur TrackableCollection de T pour cette propriété de navigation. Le gestionnaire effectue le suivi des modifications et la logique qui synchronise les deux extrémités de la relation.

    • Définition de l'interface INotifyComplexPropertyChanging. L'interface fournit un événement qui se produit lors d'une modification des propriétés complexes. La modification peut être l'affectation d'une nouvelle instance de type complexe à une propriété complexe ou une modification apportée à une propriété scalaire sur une instance de type complexe.

    • Définition de l'énumération ObjectState. La liste d'énumérateurs ObjectState se compose des constantes suivantes : Unchanged, Added, Modified et Deleted.

    • Il existe d'autres types dans le fichier utilisés pour stocker les informations d'état dans ObjectChangeTracker. Pour plus d'informations, consultez le fichier <nom du modèle>.cs ou <nom du modèle>.vb généré.

  • Un fichier pour chaque type d'entité et type complexe défini dans le modèle conceptuel : <nom du type d'entité ou du type complexe>.cs (vb).

    • Les types d'entité sont des classes partielles qui implémentent IObjectWithChangeTracker et INotifyPropertyChanged (pour prendre en charge la liaison de données bidirectionnelle dans Windows Forms, WPF et Silverlight).

      L'attribut DataContract est ajouté en haut de la classe pour que la classe puisse être sérialisée. IsReference = true est également spécifié sur l'attribut DataContract. Cela signifie que la sérialisation pour ce type est une sérialisation profonde.

      Les attributs KnownType sont ajoutés en haut de la classe. Il y a un attribut KnownType pour chaque type pour lequel ce type d'entité a une propriété de navigation.

      La définition de classes d'entité inclut les éléments suivants : propriétés primitives, propriétés complexes, propriétés de navigation, la propriété ChangeTracker et des méthodes qui facilitent la logique de synchronisation des relations.

    • Les types complexes sont des classes partielles qui implémentent INotifyComplexPropertyChanging et INotifyPropertyChanged.

Personnalisation du code de couche objet

Pour personnaliser la façon dont le code de couche objet est généré, vous devez modifier le fichier .tt. Vous pouvez modifier le nom du contexte de l'objet typé ; ajouter ou modifier des propriétés ou des attributs sur les types d'entité ; ou faire hériter le type d'entité d'une interface.

Pour personnaliser le code de couche objet, modifiez les blocs de texte dans votre fichier .tt. Le bloc de texte est défini en dehors de balises #> et <#. Pour modifier le nom du contexte de l'objet typé, ouvrez le fichier <nom du modèle>.Context.tt et ajoutez le mot (par exemple, My) juste avant toutes les occurrences de <#=code.Escape(container)#>. Puis, si dans le fichier .edmx le nom du conteneur est SchoolEntities, dans le code généré le nom du conteneur sera MySchoolEntities..

Pour plus d'informations, consultez Procédure : personnaliser la génération de code de couche objet (Entity Data Model Designer).

Voir aussi

Concepts

Fichier utilitaire .ttinclude Entity Framework

Autres ressources

Working with Self-Tracking Entities
Walkthrough: Serialize Self-Tracking Entities