Condividi tramite


Creare funzionalità personalizzate per progetti di database

È possibile estendere tipi di progetto di database esistenti aggiungendovi funzionalità personalizzate. Ad esempio, è possibile creare una funzionalità che esegua un'azione ogni volta che un progetto di database viene caricato o salvato. È inoltre possibile creare provider dello schema di database e un sistema di progetto di supporto. Tale tipo di estensibilità non è tuttavia trattato in questo contenuto.

Attività comuni

Attività comuni

Contenuto di supporto

Ulteriori informazioni sui punti di estensibilità: è possibile ottenere informazioni sulla progettazione di estensibilità del progetto di database.

  • Obiettivi dell'estensibilità dei progetti

  • Assembly di modelli componenti

  • Punti di estensibilità

  • Ciclo di vita del progetto di database

  • Gestione degli errori

Creare una funzionalità del progetto di esempio: vengono descritti i passaggi richiesti per creare una funzionalità del progetto personalizzata che visualizza una finestra di dialogo al caricamento di un progetto di database. Seguendo queste procedure dettagliate si apprenderà come:

  • Creare un pacchetto Visual Studio.

  • Personalizzare il pacchetto per creare una funzionalità del progetto di database.

  • Compilare, installare e testare la nuova funzionalità del progetto.

Installare una funzionalità del progetto personalizzata: dopo avere creato e compilato una funzionalità del progetto, è necessario installarla affinché venga riconosciuta da Visual Studio.

Obiettivi dell'estensibilità dei progetti

Gli obiettivi principali delle funzionalità di estensibilità del progetto di database in Visual Studio 2010 sono le seguenti:

  • Esporre componenti principali tramite interfacce
    Questo approccio mantiene il sistema del progetto coerente con il modello dello schema, utilizzando interfacce anziché classi astratte. Una sola classe concreta deve essere in grado di implementare molte interfacce.

  • Le funzionalità vengono create da gestione estensibilità
    Le funzionalità sono responsabili per parti principali del sistema, tra cui Esplora soluzioni, Visualizzazione schema, aggiornamento del progetto e proprietà del progetto.

  • Le funzionalità possono essere estese
    Le funzionalità possono utilizzare gestione estensibilità, file XML, il Registro di sistema o altri approcci per fornire tale estensibilità.

  • I servizi sono esposti tramite la relativa interfaccia
    DataPackage implementa IServiceProvider. Qualsiasi interazione tra funzionalità deve essere gestita mediante servizi a questi livelli. Non è necessario esporre la funzionalità come servizio. Al contrario, creare una nuova interfaccia, una classe wrapper, quindi esporre il wrapper come servizio.

  • Gli eventi controllano il sistema del progetto
    DataPackage e ProjectNode() offrono eventi che abilitano funzionalità per il controllo il sistema del progetto. Inoltre, le funzionalità possono fornire eventi tramite le interfacce del servizio. In alcuni casi è possibile decidere di utilizzare un delegato. Per decidere quale funzionalità gestisce l'azione, considerare l'utilizzo di un approccio dell'evento in cui le funzionalità possano interagire, in base alla priorità.

  • Non basarsi sull'ordine di listener
    Se l'ordine di listener per un evento è importante, considerare la possibilità di creare un pre-evento o un post-evento oppure di aggiungere una proprietà prioritaria alla classe derivata da EventArg.

Assembly di modelli componenti

Gli assembly seguenti forniscono il sistema del progetto di database in Visual Studio.

  • Microsoft.VisualStudio.Data.Schema.Package.dll
    Sistema del progetto di base, nonché avvio automatico e gestione degli eventi della funzionalità. Include funzionalità indipendenti dal database, ad esempio script.

  • Microsoft.VisualStudio.Data.Schema.PackageUI.dll
    Assembly satellite per il pacchetto indipendente dal database.

  • Microsoft.VisualStudio.Data.Schema.Package.Sql.dll
    Funzionalità specifiche di SQL Server, editor e finestre degli strumenti per Visual Studio.

  • Microsoft.VisualStudio.Data.Schema.Package.SqlUI.dll
    Assembly satellite per funzionalità specifiche di SQL Server, editor e finestre degli strumenti.

Punti di estensibilità

È possibile estendere i seguenti punti del sistema del progetto di database:

Ciclo di vita del progetto di database

Ogni file progetto del database (con estensione dbproj) contiene una proprietà denominata "DSP" che indica l'oggetto DatabaseSchemaProvider specifico che gestisce questo progetto quando viene aperto in Visual Studio. Il sistema del progetto crea una Gestione estensioni tramite questo DSP, da cui costruisce tutti i collaboratori del sistema del progetto e le funzionalità del progetto. Ogni funzionalità riceve un evento Initialize in modo che possa inizializzarsi e inserirsi nel sistema del progetto in attesa di eventi.

Gli eventi seguenti vengono generati durante l'apertura/chiusura e salvataggio del progetto:

  • NewProjectCreated
    Questo evento si verifica quando un progetto viene inizialmente creato. È possibile gestire questo evento in modo da visualizzare procedure guidate o finestre di dialogo di installazione.

  • ProjectOpening
    Il progetto è in fase di apertura. È possibile gestire questo evento in modo da aggiungere qualsiasi servizio a IDatabaseProjectNode.

  • ProjectOpened
    Questo evento si verifica quando tutti i servizi sono stati aggiunti e il progetto ha completato l'apertura. Il progetto non avrà tuttavia ancora completato la deserializzazione dello stato precedente. TaskHost e DataSchemaModel saranno NULL finché non viene inviato l'evento ProjectLoaded.

  • ProjectLoaded
    Il progetto è completamente caricato. TaskHost e DataSchemaModel sono pronti per l'utilizzo.

  • ProjectClosing
    Il progetto è in fase di chiusura. Si tratta di una buona opportunità per salvare in modo permanente qualsiasi informazione sullo stato al di fuori del file di progetto.

  • ProjectClosed
    Il progetto viene chiuso.

  • ProjectSaving
    Il progetto sta eseguendo un'operazione di salvataggio. È possibile utilizzare questo evento come un'opportunità per assicurarsi che la funzionalità sia in uno stato che consenta l'archiviazione della persistenza.

  • ProjectSaved
    Il progetto è stato salvato.

Gestione degli errori

Ogni progetto dispone di un oggetto ErrorManager. Alcuni errori, a differenza di altri, vengono salvati in modo permanente nel file con estensione dbmdl. Questo comportamento può essere controllato tramite la classe AddPersistedCategory. Per impostazione predefinita, queste categorie vengono salvate in modo permanente: ModelCategory, ValidationAtBuildCategory e ValidationOnIdleCategory. Se si aggiunge un'altra categoria persistente. sarà necessario gestire il ricaricamento del progetto e verificare e gestire gli errori. Tenere presente che anche se il progetto è chiuso, l'utente potrebbe aver modificato il file con estensione dbproj per rimuovere un file per il quale viene segnalato un errore. Sarebbe molto fuorviante per utenti se venisse segnalato un errore nel progetto quando tale file non esiste.

Gli oggetti errore del database vengono aggiunti a ErrorManager in categorie specifiche. Il concetto è che le funzionalità del progetto possono gestire la durata degli errori tramite la durata della categoria. Per quanto riguarda i nomi di categoria che creano conflitti con altre funzionalità, è consigliabile utilizzare un GUID come nome. ErrorManager definisce diverse categorie incorporate, ad esempio:

  • DefaultCategory
    Questa categoria è progettata per essere utilizzata per gli errori la cui durata è uguale alla durata del progetto. Pertanto errori che si verificano, ad esempio, durante il caricamento del progetto, vengono aggiunti a questa categoria.

  • ModelCategory
    Questa categoria deve essere utilizzata dal gestore dello schema quando si verificano errori come quelli del parser.

Scenari correlati

Creare tipi o destinazioni di refactoring del database personalizzati

Creare e registrare regole aggiuntive per l'analisi del codice del database

Generare dati di test specializzati con un generatore di dati personalizzato

Definire condizioni personalizzate per gli unit test del database

Personalizzare compilazione e distribuzione del database tramite collaboratori alla compilazione e distribuzione

Vedere anche

Concetti

Estensione delle funzionalità di database di Visual Studio