2016-06-20 16 views
5

Ho un progetto di database SQL Server 2014 in VS 2015. Ho anche creato un paio di schemi schema in SSMS (poiché VS non ha diagrammi dello schema di cui sono a conoscenza). È all'inizio del ciclo di vita del progetto e si verifica un sacco di refactoring. I diagrammi SSMS sono bravi a aggiornarsi di fronte al cambiamento - che è davvero bello. Mi piacerebbe conservare i diagrammi su (ri) pubblicare nell'ambiente dev.Come evitare di cancellare diagrammi dal database durante la pubblicazione in Visual Studio 2015

Il problema è, per tenere il passo con i refactoring, avrei bisogno di cancellare le cose nel database di destinazione che non sono più nel progetto (o semplicemente ricreare il db di destinazione nell'ambiente dev) ... ma questo farà saltare i miei diagrammi. Non ho trovato un modo pulito per evitarlo ed è un calcio negli stinchi per ricostruire i diagrammi. Qualcuno ha capito un modo abbastanza pulito per pubblicare in modo incrementale eliminando il progetto cruft mantenendo i diagrammi?

risposta

3

Eseguire lo stage dei diagrammi su una tabella temporanea globale o una tabella in un altro database prima di ricreare il database di sviluppo. È possibile farlo eseguendo qualcosa di simile:

IF (OBJECT_ID(N'tempdb..##TempTable') IS NOT NULL) DROP TABLE ##TempTable ; 

SELECT * 
INTO ##TempTable 
FROM sysdiagrams 

Purtroppo non è possibile eseguire con successo questo da uno script pre-deploy se eliminare e ricreare il database dev. Lo script di pre-distribuzione viene eseguito dopo il rilascio. Quindi vorrei dare un'occhiata alla creazione di uno script PowerShell che pubblica il dacpac, e prima che il passo dacpac venga implementato eseguire l'istruzione precedente per mettere in scena i diagrammi.

Dopo la dacpac viene distribuito, eseguire qualcosa di simile per ricreare i diagrammi:

INSERT INTO dbo.sysdiagrams (name, principal_id, version, definition) 
SELECT name, principal_id, version, definition 
FROM ##TempTable AS tt 
+0

Sì, questo è un buon approccio ... lo masticherà. Ho notato che ci sono più oggetti che solo sysdiagrams - ci sono almeno alcuni sproc ... e sembrano annotare gli oggetti in modo che SSMS li inserisca nelle cartelle "System * xxx *". – Clay

+0

È vero. Ci sono alcune cose aggiunte in cima solo a quei record. Vedrò se riesco a trovare alcune informazioni su come ricrearli facilmente. –

+0

Beh ... se io "risale" in tempdb (per la prima parte della tua risposta), posso semplicemente colpire la cartella SSMS che crea gli oggetti ... e quindi posso eseguire una variante leggermente modificata di la seconda parte. Potrebbe essere sufficiente per ora ... ma lascerò che questa domanda si stuferà un po 'di più - vedi se qualcun altro ha qualche pensiero. Apprezzo il tuo sforzo! – Clay

0

non ho molta esperienza con sviluppo di database Visual Studio, quindi questo è più di un'idea di un vero e proprio risposta.

Se è stata creata una vista materializzata (indicizzata) di dbo.sysdiagrams e inclusa nel progetto VS, si impedisce che i dbo.sysdiagrams vengano spazzati via durante la distribuzione?

create view test with schemabinding as select name, principal_id,diagram_id,version, definition from dbo.sysdiagrams 

CREATE UNIQUE CLUSTERED INDEX CIX_test_diag 
    ON dbo.test(name, principal_id,diagram_id,version) 
+0

Grazie - Avevo preso in considerazione l'inclusione di sorgenti per gli artefatti degli sysdiagrams direttamente nel mio progetto - ma odio davvero "possedere" quegli oggetti, dal momento che alcune versioni degli strumenti sono liberi di cambiare l'implementazione in futuro. Quello che sto davvero cercando è un'API per catturare e ricostituire i diagrammi. Sfortunatamente, non ho trovato una tale API ... e quindi devo spiegarla.Temo che la creazione dell'indice non manterrà tutti gli artefatti (ci sono anche proc e proprietà estese coinvolte). Sono sicuro che causerebbe anche la rottura della pubblicazione. – Clay

+1

Hai visto questo: http://www.codeproject.com/Articles/15080/Script-SQL-Server-diagrams-to-a-file? Sembra che stiano cercando di risolvere lo stesso problema che sei. È simile a quello che Clay raccomandava, ma è ben confezionato. Sebbene sia T-SQL e non un'API. –

+0

Interessante - Un po 'diverso da quello che sto cercando di ottenere, ma piuttosto bene. tra questo e ciò che ha risposto @db_brad, penso di aver escogitato una soluzione. – Clay

Problemi correlati