我们将一个Web应用程序(Net Core 1.0.0-preview2-003121)部署到Azure App Service,我们正在努力部署迁移。
在RC1 / 2中,可以使用似乎在那里自动生成的ef.cmd文件进行迁移,即我们可以使用此文件来运行
dnx ef database update
但这已经不见了。
dotnet ef
未安装在Azure App Service本身中,因此这不是一个选项。
任何不涉及从代码运行迁移/从Visual Studio部署它们的想法?
我们正在尝试构建一个持续的部署管道,而我宁愿避免强制从代码部署迁移。
我的google fu显然在这里失败了,因为在我的生活中找不到任何东西,我不能成为唯一一个试图在服务器上部署迁移的人
TIA
答案 0 :(得分:2)
我们最终做的是:
在构建方面,我们生成一个幂等数据库创建脚本:
dotnet ef migrations script --idempotent --output migrations.sql --context ApplicationContext
其中ApplicationContext是EF上下文的名称,migrations.sql是sql脚本文件名。
然后在部署方面,我们有一个小型的PowerShell脚本,可以有效地运行migrations.sql脚本
param(
[Parameter(Mandatory)]
[string]$server,
[Parameter(Mandatory)]
[string]$dbname,
[Parameter(Mandatory)]
[string]$dbadmin,
[Parameter(Mandatory)]
[string]$dbpassword,
[Parameter(Mandatory)]
[string]$migrationPath
)
function Deploy-Migrations ($migrationPath,$DBSettings)
{
#Setting up database connection
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = [string]::Format("Data Source=tcp:{0}.database.windows.net,1433;Initial Catalog={1};User Id={2}@{0};Password={3};MultipleActiveResultSets=True", $DBsettings['sqlServerName'], $DBsettings['databasename'],$DBsettings['adminAccount'], $DBsettings['adminPassword'])
try
{
$connection.Open();
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $connection
$query = Get-Content $migrationPath
$sqlCmd.CommandText = $query.Replace("GO","") # This is required to prevent "syntax" complaints
$sqlCmd.ExecuteNonQuery()
Write-Host "Migration Deployed"
}
Catch
{
Write-Error "oops ... PAnic ... $($_.Exception.Message) on $($_.Exception.ItemName)"
break
}
Finally
{
$connection.Close()
}
}
$DBSettings = @{"sqlServerName"=$server; "databasename"=$dbname; "adminAccount"=$dbadmin; "adminPassword"=$dbpassword }
Deploy-Migrations $migrationPath $DBSettings