Partager via


Créer des fonctionnalités personnalisées pour des projets de base de données

Vous pouvez étendre des types de projet de base de données existants en ajoutant vos propres fonctionnalités. Par exemple, vous pouvez créer une fonctionnalité qui exécute une action dès qu'un projet de base de données est chargé ou enregistré. Vous pouvez également créer vos propres fournisseur de schémas de base de données et système de projet de prise en charge. Toutefois, ce type d'extensibilité n'est pas abordé dans ce contenu.

Tâches courantes

Tâches courantes

Contenu de support

En savoir plus sur les points d'extensibilité : Vous pouvez lire des informations sur la conception de l'extensibilité de projet de base de données.

  • Objectifs de l'extensibilité du projet

  • Assemblys de modèle de composant

  • Points d'extensibilité

  • Cycle de vie du projet de base de données

  • Gestion des erreurs

Créer un exemple de fonctionnalité de projet : Découvrez les étapes requises pour créer une fonctionnalité de projet personnalisée qui affiche une boîte de dialogue lors du chargement d'un projet de base de données. Si vous suivez ces procédures pas à pas, vous pourrez :

  • créer un package Visual Studio ;

  • personnaliser ce package pour créer une fonctionnalité de projet de base de données ;

  • générer, installer et tester votre nouvelle fonctionnalité de projet.

Installer une fonctionnalité de projet personnalisée : Après avoir créé et généré une fonctionnalité de projet, vous devez l'installer avant que Visual Studio le reconnaisse.

Objectifs de l'extensibilité du projet

Les principaux objectifs des fonctionnalités d'extensibilité du projet de base de données dans Visual Studio 2010 se présentent comme suit :

  • Exposer les principaux composants via des interfaces
    Cette approche permet d'assurer la cohérence entre le système de projet et le modèle de schéma, en utilisant des interfaces au lieu de classes abstraites. Une seule classe concrète est attendue pour implémenter de nombreuses interfaces.

  • Les fonctionnalités sont créées par le gestionnaire d'extensibilité
    Les fonctionnalités sont responsables des principales parties du système, notamment l'Explorateur de solutions, la Vue Schéma, la mise à niveau de projet et les propriétés du projet.

  • Les fonctionnalités peuvent être étendues
    Les fonctionnalités peuvent utiliser le gestionnaire d'extensibilité, les fichiers XML, le Registre ou d'autres approches pour fournir cette extensibilité.

  • Les services sont exposés via leur propre interface
    DataPackage implémente IServiceProvider. Toute diaphonie entre les différentes fonctionnalités doit être gérée via un traitement à ces niveaux. Vous ne devez pas exposer votre fonctionnalité en tant que service. Créez plutôt une interface, une classe wrapper, puis exposez le wrapper en tant que service.

  • Les événements font fonctionner le système de projet
    DataPackage et ProjectNode() offrent des événements qui activent des fonctionnalités pour faire fonctionner le système de projet. De plus, les fonctionnalités peuvent fournir des événements via leurs interfaces de service. Dans certains cas, vous pouvez décider d'utiliser un délégué. Pour déterminer les fonctionnalités qui gèrent l'action, envisagez d'utiliser une approche d'événement dans laquelle les fonctionnalités pourraient interagir, en fonction des priorités.

  • Ne pas se reposer sur l'ordre des écouteurs
    Si l'ordre des écouteurs pour un événement est important, envisagez de créer un pré-événement ou un post-événement, ou encore envisagez d'ajouter une propriété de priorité à la classe dérivée d'EventArg.

Assemblys de modèle de composant

Les assemblys suivants fournissent le système de projet de base de données dans Visual Studio.

  • Microsoft.VisualStudio.Data.Schema.Package.dll
    Le système de projet de base fournit l'amorçage et l'utilisation des événements des fonctionnalités. Cela inclut des fonctionnalités de base de données agnostique, comme les scripts.

  • Microsoft.VisualStudio.Data.Schema.PackageUI.dll
    Assembly satellite pour le package de base de données agnostique.

  • Microsoft.VisualStudio.Data.Schema.Package.Sql.dll
    Fonctionnalités, éditeurs et fenêtres Outil spécifiques à SQL Server pour Visual Studio.

  • Microsoft.VisualStudio.Data.Schema.Package.SqlUI.dll
    Assembly satellite pour les fonctionnalités, les éditeurs et les fenêtres Outils spécifiques à SQL Server.

Points d'extensibilité

Vous pouvez étendre les points de suivi du système de projet de base de données :

Cycle de vie du projet de base de données

Chaque fichier projet de base de données (.dbproj) contient une propriété nommée « DSP » indiquant le DatabaseSchemaProvider spécifique qui gère ce projet lorsqu'il est ouvert dans Visual Studio. Le système de projet crée un gestionnaire d'extensions en utilisant ce DSP et, de là, crée l'ensemble des collaborateurs de système de projet et des fonctionnalités de projet. Chaque fonctionnalité reçoit un événement Initialize afin qu'il puisse être initialisé et associé à une racine dans le système de projet en écoutant des événements.

Les événements suivants sont déclenchés lors de l'ouverture/la fermeture et de l'enregistrement du projet :

  • NewProjectCreated
    Cet événement se produit lors de la toute première création d'un projet. Vous pouvez gérer cet événement pour afficher des Assistants ou des boîtes de dialogue de configuration.

  • ProjectOpening
    Le projet s'ouvre. Vous pouvez gérer cet événement pour ajouter des services à l'IDatabaseProjectNode.

  • ProjectOpened
    Cet événement se produit lorsque tous les services ont été ajoutés et que l'ouverture du projet est terminée. Cependant, le projet n'aura pas encore terminé de désérialiser son précédent état. TaskHost et DataSchemaModel ont la valeur NULL jusqu'à ce que l'événement ProjectLoaded soit envoyé.

  • ProjectLoaded
    Le chargement du projet est terminé. TaskHost et DataSchemaModel sont prêtes à être utilisées.

  • ProjectClosing
    Le projet se ferme. Il s'agit d'une bonne opportunité de rendre persistantes toutes les informations d'état situées hors du fichier projet.

  • ProjectClosed
    Le projet est fermé.

  • ProjectSaving
    Le projet exécute une opération d'enregistrement. Vous pouvez l'utiliser comme une opportunité de vérifier que vos fonctionnalités sont dans un état permettant le stockage de leur persistance.

  • ProjectSaved
    Le projet a été enregistré.

Gestion des erreurs

Chaque projet possède un ErrorManager. Certaines erreurs sont rendues persistantes au fichier .dbmdl, et d'autres non. Cela est contrôlé via la classe AddPersistedCategory. Par défaut, ces catégories sont rendues persistantes : ModelCategory: , ValidationAtBuildCategory et ValidationOnIdleCategory. Si vous ajoutez une autre catégorie rendue persistante, vous devez gérer le rechargement du projet, de même que vérifier et gérer vos erreurs. Souvenez-vous que, bien que le projet ait été fermé, l'utilisateur aurait pu modifier le fichier .dbproj pour supprimer un fichier pour lequel vous signalez une erreur. Il serait extrêmement déroutant pour les utilisateurs de signaler une erreur dans le projet lorsqu'aucun fichier de ce type n'existe.

Les objets d'erreur de base de données sont ajoutés au ErrorManager dans des catégories spécifiques. L'idée est que ces fonctionnalités de projet puissent gérer la durée de vie de leurs erreurs par l'intermédiaire de celle de leur catégorie. Si vous êtes concerné par des conflits de noms de catégorie avec d'autres fonctionnalités, utilisez un GUID en tant que nom. L'ErrorManager définit plusieurs catégories intégrées, notamment :

  • DefaultCategory
    Cette catégorie est conçue pour que vous l'utilisiez pour les erreurs dont la durée de vie est égale à celle du projet. Par exemple, les erreurs qui se produisent lors du chargement du projet sont ainsi ajoutées dans cette catégorie.

  • ModelCategory
    Cette catégorie doit être utilisée par le gestionnaire de schéma lorsqu'il rencontre des erreurs comme les erreurs d'analyse.

Scénarios connexes

Créer des types ou cibles de refactorisation de base de données personnalisés

Créer et inscrire des règles supplémentaires pour l'analyse du code d'une base de données

Générer des données de test spécialisées à l'aide d'un générateur de données personnalisé

Définir des conditions personnalisées pour les tests unitaires de base de données

Personnaliser la génération et le déploiement d'une base de données à l'aide de collaborateurs de génération et de déploiement

Voir aussi

Concepts

Extension des fonctionnalités de base de données de Visual Studio