2013-08-29 10 views
11

Sto cercando di creare una soluzione di database in Visual Studio 2012.Come evitare i riferimenti circolari con progetto di database di Visual Studio 2012

Ho 5 basi di dati che tutti esistono sullo stesso server, così ho importato ciascuno di essi in un progetto di database.

Sfortunatamente ci sono alcuni oggetti nei database che fanno riferimento a oggetti in altri database, quindi ho cercato di risolverli aggiungendo un riferimento al database per creare una variabile del database per fare riferimento a queste istanze del database incrociato.

Il problema è che ho un riferimento A al database B e anche un riferimento A, e non mi consentirà di aggiungere questi due riferimenti. Ricevo la finestra del messaggio che diceva "Aggiungere questo progetto come riferimento causerebbe una dipendenza circolare".

Qualche idea sugli approcci per risolvere questo problema? Immagino che un modo potrebbe essere quello di creare una soluzione per ogni database, ma preferirei non se c'è un modo migliore per farlo.

Stiamo provando a creare una build automatizzata, quindi ho davvero bisogno di compilare i progetti del database.

risposta

13

Si desidera estrarre gli schemi di database in file dacpac (presupponendo che si stiano utilizzando i file SSDT SQLProj e non i vecchi file DBProj per i propri progetti). È possibile farlo tramite SSMS o tramite la riga di comando SQLPackage. Una volta estratti, mettili in un posto che tutti i progetti possono colpire (e preferibilmente è ancora sotto controllo del codice sorgente in modo che tutti possano farvi riferimento). Aggiungi quei file dacpac ai tuoi progetti come riferimenti di database, probabilmente senza l'opzione di usare una variabile per il Nome DB.

ho scritto per l'aggiunta di riferimento del database sul mio blog qui: http://schottsql.blogspot.com/2012/10/ssdt-external-database-references.html

Una nota aggiuntiva - se si sta costruendo nuove basi di dati provenienti da questi progetti, è probabile che necessario passare attraverso diversi passaggi. Disattiva l'opzione per eseguire come transazione e fallire quando si verifica un errore, quindi verranno creati alcuni oggetti, ripetere se necessario fino alla creazione di tutti gli oggetti. Ho usato una variabile nei miei progetti denominata "DeployType" e ho impostato gli script di pre e post distribuzione per gestire un DeployType di "Nuovo" in modo diverso, in modo che non tentasse di popolare/aggiornare i dati per le build "Nuove".