2016-11-25 53 views
0

我正在嘗試爲持續集成準備一個新項目。 我的項目是用.Net Core編寫的,使用Entity Framework Core進行數據庫訪問。 我需要嘗試做的事情是在我的項目中添加預構建步驟以添加新的遷移。 我已經將webapp設置爲在啓動時應用所有遷移,但並不想在提交我的代碼之前手動創建遷移。我相信這應該是CI配置的一部分,因爲我可能會在開發過程中經歷數百次數據庫更改,但是當我部署最新的代碼時,我希望爲每個發佈的版本都提供一個遷移腳本。可以將Entity Framework Core配置爲在項目構建期間生成遷移

我目前使用的是.Net Core和EF Core的所有nuget依賴的v1.1.0。

編輯: J.Pichardo的鏈接與我所要求的相似。但從我可以告訴它是關於應用遷移(我已經在我的代碼中工作)。

bricelam的答案可能會作爲我試圖完成的代碼版本。但是,我希望有一種方法來配置project.json文件,以便它可以使用生成的遷移名稱(理想情況下使用可由我的CI設置的環境變量)運行Add-Migration腳本。

然後,這可以讓我在開發過程中手動創建遷移,然後讓我的CI在每個發佈過程的最後階段創建完整的遷移。

+0

可能有關? http://stackoverflow.com/questions/11616772/continuous-integration-with-ef-code-first-migrations –

回答

0

可以以編程方式生成遷移,但我不會推薦它。要做到這一點,請參考Microsoft.EntityFrameworkCore.Design包,並使用類似於以下內容的代碼。

using (var context = new MyDbContext()) 
{ 
    var services = ((IInfrastructure<IServiceProvider>)context).Instance; 
    var codeHelper = new CSharpHelper(); 
    var scaffolder = ActivatorUtilities.CreateInstance<MigrationsScaffolder>(
     services, 
     new CSharpMigrationsGenerator(
      codeHelper, 
      new CSharpMigrationOperationGenerator(codeHelper), 
      new CSharpSnapshotGenerator(codeHelper))); 

    var migration = scaffolder.ScaffoldMigration(
     "MyMigration", 
     "MyApp.Data"); 
    File.WriteAllText(
     migration.MigrationId + migration.FileExtension, 
     migration.MigrationCode); 
    File.WriteAllText(
     migration.MigrationId + ".Designer" + migration.FileExtension, 
     migration.MetadataCode); 
    File.WriteAllText(migration.SnapshotName + migration.FileExtension, 
     migration.SnapshotCode); 
} 
相關問題