EF Core(1.0.0)迁移在Azure App Services上

5
我们有一个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 部署迁移的想法?

我们正在尝试构建一个连续的部署流水线,我宁愿避免强制从代码部署迁移。

我的谷歌搜索显然在这里失败了,因为它找不到任何东西,我不可能是唯一一个试图在服务器上部署迁移的人。

TIA


CLI已经改变。https://docs.efproject.net/en/latest/miscellaneous/cli/dotnet.html - Benjamin Abt
@Ben确实如此。我在帖子中提到了这一事实,指出dotnet ef未安装,可能不清楚我指的是在Azure应用服务本身上而不是我的机器上。 - ManyRootsofAllEvil
2个回答

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

4
谢谢你。有时候使用ASP.NET Core让我感觉自己是世界上唯一使用它的人。 O_O 那就用SQL脚本吧... - John Hargrove

0

从 .Net 6.0 开始(也许包括 .Net Core 3.x)...

你可以在 ARM 模板中使用 deployScript 来执行迁移。这里有一个示例,它被设计为 Azure Marketplace 部署。该示例假定您已经预先生成了一个名为 script.sql 的文件,并将其保存在市场应用程序部署“捆绑包”的 artifacts 文件夹中。然后,deployScript 只需运行一个 Invoke-Sqlcmd 命令来运行 script.sql 文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接