Il problema che voglio risolvere è creare script diversi a seconda della configurazione di build.Progetto di database SQL: creare diversi script in base alla configurazione di build
Supponiamo di avere due istanze di SQL Server: la versione
- Enterprise con i server collegati collegati
- versione LocalDB per offline lo sviluppo e l'unità di test
versione Enterprise dispone di una vista per i server collegato quando LocalDB sostituisce quelle viste con le tabelle locali.
Quelle viste Server collegati e le tabelle locali hanno gli stessi nomi e set di campi. Quindi non sono inclusi nella build di default (Build Action = None). Invece sono inclusi nella build di BeforeBuild Target del file di progetto.
<Target Name="BeforeBuild">
<ItemGroup Condition=" '$(Configuration)' == 'LocalDb'">
<Build Include="Local_Tables\*.sql" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)' != 'LocalDb' ">
<Build Include="Linked_Server_Views\*.sql" />
</ItemGroup>
</Target>
ma il problema è che Visual Studio memorizza nella cache del Modello DB e se prima di costruire progetti per LocalDB e quindi provare costruire progetto per la configurazione Enterprise - visivi uscite Studio errori:
Errore: SQL71508: I il modello ha già un elemento che ha lo stesso nome
Se per chiudere e aprire la soluzione o Unload Project e Ricarica progetto, Visual Studio ricrea i file dbmdl e la configurazione Enterprise viene creata senza errori.
Quindi la mia ipotesi è che se aggiorno la cache di dbmdl otterrò una build fluida senza errori.
Quando progetto di database SQL Server aperta o ricaricare in Visual Studio 2012, si crea un file con estensione dbmdl, che è un modello db deserializzati e memorizzato nella cache come descritto here.
Nel momento del file dbmdl ricreazione Visual Studio emette il seguente:
Deserializing the project state for project 'MyProject.sqlproj'...
Detecting file changes for project 'MyProject.sqlproj'...
Deserialization has been completed for project 'MyProject.sqlproj'.
Come forzare Visual Studio per aggiornare la cache dbmdl senza progetto ricarica e senza cambiare il file xml progetto?
C'è un modo per aggiornare la cache dbmdl inserendo un comando nelle destinazioni BeforeBuild o AfterBuild del file xml di progetto?
Oppure l'intero approccio al problema è errato e c'è un altro modo per creare script diversi a seconda della configurazione di build?
Peter, grazie per la risposta. Non ho ancora una soluzione per la mia domanda. Proverò i tuoi consigli per il prossimo progetto. Ma immagino che spostare una creazione di creazione di tabelle/viste nello script Post-Deploy ci dia errore durante la costruzione, perché altri oggetti fanno riferimento a quelle tabelle/viste. –
Bene, potresti tecnicamente lasciare le viste "locali" per il tuo progetto in modo da creare tutto, quindi aggiungere una sezione post-distribuzione che le ritocchi tutte per essere eseguite su un server collegato solo se le userai. Sono d'accordo che non è il modo migliore per gestirlo, ma dovrebbe funzionare se lo fai in questo modo. –
È possibile che sia disponibile un'altra opzione nell'utilizzo di progetti compositi. Jamie Thompson ha scritto su di loro qui: http://sqlblog.com/blogs/jamie_thomson/archive/2013/03/10/deployment-of-client-specific-database-code-using-ssdt.aspx –