Database 如何使用PowerShell批量调用更新数据库
我们使用一个Azure弹性池,生成多个客户端数据库和一个主数据库,并引用客户端数据库 我们已经有多个数据库,正在开发新版本的代码。我们首先使用EF6代码。 当我们对模型进行更改并添加属性时,我们将创建迁移文件,并需要为所有现有客户机数据库调用更新数据库。 这是我们想跳过的猴子作业 我已经有了一个Powershell脚本,可以连接到主数据库并对表执行查询。这将返回子数据库的名称。 使用它,我可以更改Web.config并用子数据库的正确名称替换模板数据库名称 现在我需要调用updatedatabase来执行迁移脚本。在最后一部分中,我遇到了困难,因为我在VisualStudio外部运行ps1脚本,因此命令更新数据库是未知的。我尝试使用migrate.exe,但后来出现了很多错误Database 如何使用PowerShell批量调用更新数据库,database,powershell,azure,visual-studio-2015,Database,Powershell,Azure,Visual Studio 2015,我们使用一个Azure弹性池,生成多个客户端数据库和一个主数据库,并引用客户端数据库 我们已经有多个数据库,正在开发新版本的代码。我们首先使用EF6代码。 当我们对模型进行更改并添加属性时,我们将创建迁移文件,并需要为所有现有客户机数据库调用更新数据库。 这是我们想跳过的猴子作业 我已经有了一个Powershell脚本,可以连接到主数据库并对表执行查询。这将返回子数据库的名称。 使用它,我可以更改Web.config并用子数据库的正确名称替换模板数据库名称 现在我需要调用updatedataba
我认为最简单的解决方案是在Package manager控制台中运行我的脚本,但我不知道如何做到这一点。您可能想看看。它设计用于弹性数据库池
弹性数据库作业SDK也包括。我设法让它工作起来。将ps1文件放入代码文件夹的根目录后,我可以在包管理器控制台中使用。\UpdateDatabases.ps1运行它 为了完整起见,这里是我创建的脚本。我是PowerShell的新手,因此可能会进行一些优化
cls
$currentPath = (Get-Item -Path ".\" -Verbose).FullName
#Read Web.config
$webConfig = $currentPath + "\<your project>\Web.config"
$doc = (Get-Content $webConfig) -as [Xml]
$DatabaseNamePrefix = $doc.configuration.appSettings.add | where {$_.Key -eq 'DatabaseNamePrefix'}
#Get Master connectionstring
$root = $doc.get_DocumentElement();
foreach($connString in $root.connectionStrings.add | where {$_.Name -eq "Master"})
{
$masterConn = $connString.connectionString
}
#Connect to master database
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $masterConn
#Query Client table for the child database names
$SqlQuery = "select Code from Clients"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
#Put query result in dataset
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
foreach ($row in $DataSet.Tables[0].Rows)
{
$clientDbName = $row[0].ToString().Trim()
#Change Web.Config
foreach($connString in $root.connectionStrings.add | where {$_.Name -eq "DevelopmentDb"})
{
$newDatabaseName = "Database=" + $DatabaseNamePrefix.value + $clientDbName + ";";
$newConn = $connString.connectionString -replace "(Database=.*?;)",$newDatabaseName
$connString.connectionString = $newConn;
}
$doc.Save($webConfig)
#Update database
Update-Database -ConfigurationTypeName Application
}
"Finished"
相关的