【问题标题】:EF Core (1.0.0) Migrations On Azure App ServicesAzure 应用服务上的 EF Core (1.0.0) 迁移
【发布时间】:2016-09-21 20:04:26
【问题描述】:

我们有一个 Web 应用 (Net Core 1.0.0-preview2-003121) 部署到 Azure 应用服务,我们正在努力部署迁移。

在 RC1/2 中,可以使用似乎自动存在的 ef.cmd 文件进行迁移,即我们可以使用该文件来运行

dnx ef database update 

但这已经消失了。

dotnet ef 没有安装在 Azure 应用服务本身中,所以这不是一个选项。

任何不涉及从代码运行迁移/从 Visual Studio 部署它们的想法?

我们正在尝试构建一个持续部署管道,我宁愿避免从代码强制部署迁移。

我的 google fu 显然让我失望了,因为它无法在我的一生中找到任何东西,而且我不能成为唯一一个尝试在服务器上部署迁移的人

TIA

【问题讨论】:

标签: entity-framework azure


【解决方案1】:

我们最终做的是:

在构建端我们生成一个幂等数据库创建脚本:

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

【讨论】:

  • 谢谢。有时使用 ASP.NET Core 让我觉得我是世界上唯一使用过它的人。 O_O SQL 脚本是....
猜你喜欢
  • 1970-01-01
  • 2019-10-08
  • 2021-11-23
  • 1970-01-01
  • 2023-03-21
  • 2016-09-04
  • 2022-11-11
  • 2020-05-29
  • 2012-08-07
相关资源
最近更新 更多