Introduzione ai Database Project con Visual Studio

Scritto da  Antonio Pierascenzi il mercoledì 8 febbraio 2012
Linguaggio: C#,VB   •  Framework: 4.0   •  Livello: 100

Download pdf


Questo articolo rappresenta un vademecum per la creazione di una soluzione  necessaria per  modificare un database esistente. Dopo aver creato un progetto di tipo database project, disponibile anche sottoforma di un comodo wizard ma facendo attenzione a non scegliere un database server project (che crea un progetto con preimpostato lo scheletro di un applicazione con CLR abilitato su Sql Server), ci viene chiesto da quale database sorgente dobbiamo importare schema o tabelle. Fatto questo e scelto fra le varie opzioni disponibili in riferimento ai parametri di impostazione del database su cui stiamo lavorando, possiamo procedere nelle modifiche eventuali ai database. Dobbiamo prestare  attenzione nel fatto di apportare le modifiche  solo ed esclusivamente nel progetto creato d'ora in poi (nel caso in cui dovessimo modificare il database dobbiamo fare uno Schema Compare, tra la sorgente scelta inizialmente e lo schema del progetto, disponibile dal menu Data e lanciare gli update del caso).
Per il nostro scopo abbiamo scelto un database identico sia in fase di import che come target del progetto, questa attività  rappresenta anche uno dei punti successivi da testare.
Il punto dove vorremmo soffermarci in questo articolo è il deploy che, dopo aver buildato la soluzione per verificare la coerenza e la consistenza delle modifiche apportate, provvede ad aggiornare le stesse sul database target.
Le impostazioni di deploy richieste in fase di creazione del progetto, sono disponibili nelle proprietà del progetto nel tab Deploy.

DbProject-fig1

Fig.1

Nell'opzione Deploy Action decidiamo eventualmente di effettuare direttamente le modifiche in fase di deploy o di farci creare esclusivamente lo script da lanciare manualmente (anche da VS2010 come ben sapete), così come possiamo decidere un target db diverso nel caso dovessimo deployare le modifiche ad es. su db di produzione.
Ci sono altre impostazioni che andrebbero approfondite e che sono raggiungibili anche dal ramo delle Properties, che ci permettono di avere un controllo più capillare del progetto.

DbProject-fig2

Fig.2

In particolare per la proprietà Database.sqldeployment esistono diverse opzioni di "peso" :

DbProject-fig3

Fig.3

Accessibile attraverso la scelta del pulsante Edit.. nella sezioneDeployment configuration file

DbProject-fig4

Fig.4

Di rilevanza per la maggior parte dei casi sono in particolare due, di cui una impostata a True:

  1. Block incremental deployment…..  che blocca il deploy nel caso in cui sono presenti delle possibili perdite di dati a causa di modifiche del tipo su una colonna di una tabella (es. da char(100) a char(50)
  2. Generate drop statements for objects …  che genera nello script di deploy uno statement DROP per quegli oggetti presenti nel target db ma non nel database project, questa impostazione è false di default.

Per il test sul deploy su altri istanze di server e db c'è da annotare un aspetto fondamentale: dobbiamo ricordarci che il database project in fase di impostazione iniziale del progetto in relazione al database target, crea un percorso fisico in locale per il database e per il file di log. Questo può andar bene quando il deploy viene fatto sullo stesso db target (ossia coincidono le due istanze) mentre ovviamente non può esserlo nel nostro test. Per ovviare a questo inconveniente dobbiamo semplicemente eliminare i relativi file dalla solution e fare tranquillamente il deploy della solution che ricreerà i percorsi corretti, dopo aver ovviamente modificato nelle impostazioni di deploy il nuovo db di destinazione.

Il percorso dove si trovano i file è:

DbProject-fig5

Fig.5

Nell'immagine sono stati già eliminati.

Per evitare, nelle fasi di test, di fare direttamente dei deploy sui database, reimpostiamo nelle property del progetto, la deploy  action su : Create a deployment script(.sql)
Fatto questo si può procedere al deploy che evidenzierà il funzionamento degli obiettivi  previsti e la creazione del fle <nome_progetto>.sql nella directory debug o release del progetto e, contemporaneamente, della <nome_progetto>.dll nella directory debug\release del progetto web.

Data generation

Normalmente la generazione di dati di test per un database di sviluppo avviene o attingendo da un backup di un database in produzione o scrivendo i record  a mano.
Ovviamente Visual Studio 2010 ci offre uno strumento potente e flessibile per l'obiettivo prefissato, che necessita  dell'aggiunta di un nuovo file di tipo .dgen contenente la  definizione dello schema del database su cui stiamo lavorando ivi comprese le impostazioni della collation.
Il design che ci viene fornito ci permette di modificare le proprietà di ogni singola colonna del database a livello di tipo di generatore di dati, che in generale sono standard ma è possibile crearne altri personalizzati.

DbProject-fig6

Fig.6

Come si può vedere, avendo impostato sul nostro database un check-constraints nella colonna Phone che controlla l'inserimento di valori superiori a 9 caratteri, abbiamo utilizzato una banalissima Regular Expression : [0,9]{10,}.  E limitato la lunghezza massima a 30 (Maximum Length).
Fatto questo possiamo procedere a vedere un anteprima dei dati che verranno inseriti attraverso il menu Data ->Data generator -> Preview Data generation e, se tutto è come volevamo, possiamo procedere alla generazione vera e propria sempre dallo stesso menu voce  Generate Data.
Ci comparirà una dialog box di scelta del database di destinazione e un successivo messaggio in cui ci viene chiesto se vogliamo eliminare o meno  i dati presenti nel database prima di continuare.
Ovviamente questo articolo è lontano dall'essere esaustivo ma rappresenta un primo semplice passo verso l'integrazione del "codice" sql verso il controllo del versioning con Team Foundation Server.

Riferimenti :
Overview Database Project


Tags: 

 
x