Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何使用PowerShell批量调用更新数据库_Database_Powershell_Azure_Visual Studio 2015 - Fatal编程技术网

Database 如何使用PowerShell批量调用更新数据库

Database 如何使用PowerShell批量调用更新数据库,database,powershell,azure,visual-studio-2015,Database,Powershell,Azure,Visual Studio 2015,我们使用一个Azure弹性池,生成多个客户端数据库和一个主数据库,并引用客户端数据库 我们已经有多个数据库,正在开发新版本的代码。我们首先使用EF6代码。 当我们对模型进行更改并添加属性时,我们将创建迁移文件,并需要为所有现有客户机数据库调用更新数据库。 这是我们想跳过的猴子作业 我已经有了一个Powershell脚本,可以连接到主数据库并对表执行查询。这将返回子数据库的名称。 使用它,我可以更改Web.config并用子数据库的正确名称替换模板数据库名称 现在我需要调用updatedataba

我们使用一个Azure弹性池,生成多个客户端数据库和一个主数据库,并引用客户端数据库

我们已经有多个数据库,正在开发新版本的代码。我们首先使用EF6代码。 当我们对模型进行更改并添加属性时,我们将创建迁移文件,并需要为所有现有客户机数据库调用更新数据库。 这是我们想跳过的猴子作业

我已经有了一个Powershell脚本,可以连接到主数据库并对表执行查询。这将返回子数据库的名称。 使用它,我可以更改Web.config并用子数据库的正确名称替换模板数据库名称

现在我需要调用updatedatabase来执行迁移脚本。在最后一部分中,我遇到了困难,因为我在VisualStudio外部运行ps1脚本,因此命令更新数据库是未知的。我尝试使用migrate.exe,但后来出现了很多错误


我认为最简单的解决方案是在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"
相关的