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. |
|
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 :
|
|
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 :
IDatabaseProjectFeature (AllowMultipleExtensions =true)
Il s'agit du point d'extension principal du système de projet. Les fonctionnalités sont conçues pour contrôler le projet et y contribuer. Elles peuvent éventuellement implémenter plusieurs interfaces : IOleCommandTarget, IDatabaseProjectPriorityCommandTarget, IDatabaseProjectPropertyPageContributor, IDatabaseProjectExtenderContributor<TExtendee>, IDatabaseProjectAddNewItemParticipant, IDatabaseProjectIdleProcessor et IDatabaseProjectPartialProjectParticipant.IDatabaseProjectBuildActionContributor (AllowMultipleExtensions =false)
Ajoute des chaînes BuildAction à la liste des actions de génération possibles dans le système de projet. Par exemple, le système de projet SQL Server fournit Predeploy et Postdeploy.IDatabaseProjectUserFileContributor (AllowMultipleExtensions =false)
Spécifie les propriétés qui doivent être routées vers le fichier .user.IDatabaseSchemaViewController (AllowMultipleExtensions =false)
Remplit la Vue Schéma et répond aux événements à partir de cette vue.IDatabaseProjectFileUpgradeController (AllowMultipleExtensions =false)
Met à niveau le fichier projet en tant que document XML. Ce processus se produit avant que le système de projet Visual Studio ne tente de charger l'instance de projet via la fabrique de projets.IDatabaseProjectReferenceController (AllowMultipleExtensions = false)
Contrôle les références de projet.IDatabaseProjectPartialProjectParticipant (AllowMultipleExtensions = true)
Active une fonctionnalité pour filtrer des fichiers qui ne doivent pas être exportés en tant que projet partiel.IDatabaseProjectHelpKeywordProvider
Fournit le mot clé d'aide du système de projet utilisé lorsque le client appuie sur F1.
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
Voir aussi
Concepts
Extension des fonctionnalités de base de données de Visual Studio