gpt4 book ai didi

database - 如何使用PowerShell批量调用Update-Database

转载 作者:行者123 更新时间:2023-12-02 06:11:48 27 4
gpt4 key购买 nike

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

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

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

现在我需要调用Update-Database来执行迁移脚本。对于最后一部分,我很困难,因为我在 Visual Studio 外部运行 ps1 脚本,因此命令 Update-database 是未知的。我尝试使用 migrate.exe 但随后出现很多错误。

我认为最简单的解决方案是在包管理器控制台中运行我的脚本,但我不知道如何做到这一点。

最佳答案

我设法让它工作。将 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"

关于database - 如何使用PowerShell批量调用Update-Database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com