2016-09-21 126 views
5

我们有一个部署到Azure App Service的Web应用程序(Net Core 1.0.0-preview2-003121),我们正在努力部署迁移。EF Core(1.0.0)在Azure App Services上迁移

在RC1/2这是可能的,似乎是自动的有一个ef.cmd文件做迁移,也就是我们可以使用这个文件运行

dnx ef database update 

但这已经一去不复返了。

dotnet ef没有安装在Azure App Service本身中,所以这不是一个选项。

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

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

我的谷歌赋是明显没有我在这里,因为它不能为我的生活找到任何东西,我不能是唯一一个试图在服务器上部署迁移

TIA

+0

的CLI已经改变一个小PowerShell脚本。 https://docs.efproject.net/zh/latest/miscellaneous/cli/dotnet.html – Ben

+0

@它确实。我在帖子中提到了这个事实,提到没有安装dotnet ef,可能不清楚我的意思是在天蓝色的应用程序服务本身,而不是我的机器 – ManyRootsofAllEvil

回答

2

我们落得这样做是:

在构建方面,我们产生幂等数据库创建脚本:

dotnet ef migrations script --idempotent --output migrations.sql --context ApplicationContext 

其中的ApplicationContext是溜溜的名字ur上下文和migrations.sql是sql脚本文件的名称。

然后在部署方面,我们有一个有效运行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 
+2

感谢您的支持。有时,使用ASP.NET Core使我觉得自己是世界上唯一曾经使用过它的人。 O_O SQL脚本是.... –