在Visual Studio 2015中发布时如何避免从数据库中删除图表

Cla*_*lay 5 sql-server diagram ssms visual-studio-2015

我在VS 2015中有一个SQL Server 2014数据库项目.我还在SSMS中创建了几个架构图(因为VS没有我知道的任何架构图).它是项目生命周期的早期阶段,并且发生了大量的重构.SSMS图表善于在变化面前更新自己 - 这非常好.我想在开发环境中保留(重新)发布的图表.

问题是,为了跟上重构,我需要删除目标数据库中不再存在于项目中的东西(或者只是在开发环境中重新创建目标数据库)......但这会导致我的图表要被吹走 我还没有想出一个干净的方法来避免这种情况,这是重建图表的好处.有没有人想出一个相当干净的方式来逐步发布,同时删除项目残骸但保留图表?

db_*_*rad 3

在重新创建开发数据库之前,将图表暂存到全局临时表或另一个数据库中的表。您可以通过运行如下命令来做到这一点:

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

SELECT  * 
INTO ##TempTable
FROM    sysdiagrams
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果您删除并重新创建开发数据库,​​则无法从预部署脚本成功运行它。预部署脚本在放置后运行。因此,我会考虑创建一个发布 dacpac 的 powershell 脚本,并在 dacpac 部署步骤之前执行上述语句来暂存图表。

部署 dacpac 后,运行如下命令来重新创建图表:

INSERT INTO dbo.sysdiagrams (name, principal_id, version, definition)
SELECT name, principal_id, version, definition
FROM ##TempTable AS tt
Run Code Online (Sandbox Code Playgroud)