2016-09-21 4 views
5

У нас есть веб-приложение (Net Core 1.0.0-preview2-003121), развернутое в Azure App Service, и мы изо всех сил пытаемся развернуть миграцию.EF Core (1.0.0) Миграции в Azure App Services

В RC1/2 можно было сделать миграцию с ef.cmd файлом, казалось бы, автомагический там, а именно мы могли бы использовать этот файл для запуска

dnx ef database update 

, но это ушло.

dotnet ef не установлен в службе Azure App Service, поэтому это не вариант.

Любые идеи, которые не связаны с выполнением миграции из кода/развертыванием их из visual studio?

Мы пытаемся построить конвейер непрерывного развертывания, и я бы предпочел избежать принудительного развертывания миграции из кода.

МОЯ Google фу явно не удается мне здесь, как это не могу за жизнь мне найти что-нибудь, и я не могу быть только один пытается развернуть миграции на сервере

ТИА

+0

В режиме консоли изменилось. https://docs.efproject.net/ru/latest/miscellaneous/cli/dotnet.html – Ben

+0

@Ben это действительно так. Я упомянул об этом на этом посту, упоминая, что dotnet ef не установлен, возможно, неясно, что я имел в виду на службе приложения azure, а не на моей машине. – ManyRootsofAllEvil

ответ

2

То, что мы в конечном итоге делает это:

на стороне сборки мы создаем скрипт создания базы данных тождественной:

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

Где ApplicationContext это имя йо ur EF context и 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 
+2

Спасибо за это. Иногда работа с ASP.NET Core заставляет меня чувствовать, что я единственный человек в мире, который когда-либо использовал его. O_O SQL Scripts это .... –

Смежные вопросы