2016-01-30 8 views
6

Skonfigurowałem ciągłą integrację dla mojego projektu z definicjami kompilacji Visual Studio Online.Jak uruchomić narzędzie migrate.exe Entity Framework z Visual Studio Online?

Jeśli chodzi o wdrażanie mojej bazy danych (do środowiska testowego platformy Azure), po prostu utworzę moją SQL Server Database Project z odpowiednimi ustawieniami publikowania.

Ale najpierw chcę przełączyć się na kod Entity Framework i skorzystać z funkcji migracji, która wymaga wywołania metody migrate.exe.

Moje pytanie brzmi - w jaki sposób mogę uruchomić plik migrate.exe z VSO definicji kompilacji?

+0

Z którego systemu budowy korzystasz? vNastępczy lub XAML? –

+0

Używam vNext. Dziękuję Ci! – user11081980

Odpowiedz

7

Zakładam, że korzystasz z kompilacji vNext, dodaj zadanie "Instalator Nuget" w definicji kompilacji, aby przywrócić strukturę Entity podczas budowania. Migrate.exe zostanie zainstalowany w folderze \ packages \ EntityFramework. \ Tools. Następnie dodaj zadanie "Command Line", aby uruchomić plik migrate.exe. Enter „\ pakiety \ EntityFramework. \ Tools \ migrate.exe” w obszarze «narzędziem» i argumentów «argumentami» polu.

+3

Jak wiem, symboli wieloznacznych nie można używać w zadaniu wiersza polecenia. Jak usunąć zależność od wersji EF? – alexey

+0

Występuje następujący błąd. Jakieś pomysły? Nie można załadować pliku lub zespołu 'EntityFramework, Version = 6.0.0.0 Działającego w systemie vNext kompilacji. – TWilly

+0

@ TWilly Zobacz ten link, aby dowiedzieć się, jak korzystać z pliku migrate.exe: https://msdn.microsoft.com/en-sg/data/jj618307.aspx –

3

Można również spojrzeć na wykonywanie swoich migracje w czasie uruchamiania aplikacji.

add następujące do Application_Start() zdarzenie w global.asax

var configuration = new Configuration(); 
var migrator = new DbMigrator(configuration); 
migrator.Update(); 

to będzie ogień migracje przy każdym uruchomieniu aplikacji. można również owinąć z logiki warunkowej kontrolować jak jest zwolniony.

+0

Yup. Jak opisano tutaj https://blogs.msdn.microsoft.com/webdev/2014/04/08/ef-code-first-migrations-deployment-to-an-azure-cloud-service/ – JackMorrissey

+1

Uważam, że jest to bardzo niebezpieczne podejście, ponieważ nie będziesz wiedzieć o problemach z migracją do pierwszego połączenia z Twoją witryną. Z pewnością zalecałbym konkretny krok aktualizacji do bazy danych jako wyraźny krok. –

6

Mamy z powodzeniem zaimplementowano zautomatyzowany kod EF Pierwsza migracja w czasie rozmieszczenia na górze TFS Budowa vNext w następujący sposób:

Zasadniczo obejmuje 3 etapy (za EF-context):

  1. Kopiowanie EF-projekt do katalogu pomostowym
  2. Copy migrate.exe w tym samym katalogu (migrate.exe wymaga być umieszczone obok montażowe zawierające EF migracji)
  3. wykonać migrate.exe

w szczegółach:

  1. Kopiowanie plików "zadanie"
      folderu
    • Źródło: $ (build.sourcesdirectory)
    • Zawartość: Contoso.EF \ bin \ debug \ **
    • docelowa folderu: $ (build.artifactstagingdirectory)/EF
  2. Kopiowanie plików "zadanie"
    • folderu Źródło: $ (build.sourcesDirectory) \ pakiety \ EntityFramework.6.1.3 \ narzędzi
    • Zawartość: migrate.exe
    • folder docelowy: $ (build.artifactstagingdirectory) \ EF \ CONTOSO.EF \ bin \ debug \ bin \ debug
  3. skrypt wsadowy "zadanie"
    • Path: $ (build.sourcesdirectory) _Deploy \ MigrateEFContext.bat
    • Argumenty: $ (build.artifactstagingdirectory) \ EF \ Contoso.EF \ bin \ debug Contoso.EF.dll [SQL-Server-instancja] [dBNAME] System.Data.SqlClient

plik MigrateEFContext.bat montuje migrate.exe-komendy z jej argumentami:

SET EFDir=%1 
SET EFContext=%2 
SET connStringDataSource=%3 
SET connStringInitialCatalog=%4 
SET connectionProviderName=%5 

%EFDIR%\migrate.exe %EFContext% /ConnectionString:"Data Source=%connStringDataSource%;Initial Catalog=%connStringInitialCatalog%;Integrated Security=true" /connectionProviderName:%connectionProviderName% /verbose