我们使用Azure SQL数据库,并使用弹性库具有“分片”结构。我们正在开始过渡到Visual Studio Team Services,并希望使用他们的构建和发布流程来部署到开发和生产环境。
是否有构建任务将在我们所有的分片上执行SQL脚本(确保它成功运行并遵循一些重试条件)。脚本将是幂等的。
如果我们还可以拥有一个将从我们的EF实体模型生成SQL脚本的任务,那么奖励积分。如果没有,我的计划是找到一种方法来创建脚本作为构建过程的一部分,让版本执行它。
答案 0 :(得分:1)
我可以帮助您使用构建/发布过程从EF模型生成SQL脚本。要达到你需要的目的:
将您的EF升级到6.2或更高版本。
获取" migrate.exe"来自" /packages/EntityFramework.6.2.0/tools /"并放入您的项目(不要忘记将属性更改为"始终复制"因此在构建过程中将与其他DLL一起复制)
创建将运行migrate.exe并在目标数据库上应用SQL scripr的PowerShell脚本。您的脚本可能如下所示
param
(
[string] [Parameter(Mandatory=$true)] $dbserver,
[string] [Parameter(Mandatory=$true)] $dbname,
[string] [Parameter(Mandatory=$true)] $dbserverlogin,
[string] [Parameter(Mandatory=$true)] $dbserverpassword,
[string] [Parameter(Mandatory=$true)] $rootPath,
[string] [Parameter(Mandatory=$true)] $buildAliasName
)
& "$rootPath\migrate.exe" Context.dll /connectionProviderName="System.Data.SqlClient" /connectionString="Server=tcp:$dbserver.database.windows.net,1433;Initial Catalog=$dbname;Persist Security Info=False;User ID=$dbserverlogin;Password=$dbserverpassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" /startUpDirectory=$rootPath /verbose /scriptFile=1.SQL
Write-Host "Running migration script..."
& "SQLCMD" -S "$dbserver.database.windows.net" -U $dbserverlogin@$dbserver -P $dbserverpassword -d $dbname -i 1.SQL
其中Context.dll
是包含EF数据上下文的程序集。脚本将运行migrate.exe,它将生成输出脚本到1.SQL
文件。之后,它将使用SQLCMD.exe运行此脚本。请注意,默认情况下,使用VSTS中的HOSTED代理可以使用SQLCMD.exe。如果您正在使用" HOSTED 2017"比你需要指定SQLCMD.exe的完整路径(在写这条路径的时候是c:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE
)