2016-11-25 3 views
0

継続的な統合のための新しいプロジェクトを準備しようとしています。 私のプロジェクトは.Net Coreで書かれており、Entity Framework Core for Databaseアクセスを使用しています。 私が試してやる必要があることは、プロジェクトに新しい移行を追加するためのビルド前のステップを追加することです。 起動時にすべての移行を適用するようにwebappを設定しましたが、実際にコードをコミットする前に手動で移行を作成する必要はありませんでした。開発中に何百ものデータベース変更を経る可能性があるので、CIセットアップの一部でなければならないと考えていますが、最新のコードをデプロイするときに、リリースされた各バージョンの移行スクリプトを用意したいと思います。プロジェクトのビルド中に、移行を生成するようにEntity Frameworkコアを構成できるかどうかを確認します。

私は現在、.Net CoreとEF Coreにすべてのnuget依存関係のv1.1.0を使用しています。

EDIT: J.Pichardoのリンクは、私が求めているものに似ています。しかし、私が言うことは、マイグレーションを適用することです(これは私のコードですでに働いています)。

私が達成しようとしているもののコードバージョンとしてbricelamからの回答が役立つかもしれません。しかし、私は、移行のために生成された名前(理想的には自分のCIで設定できる環境変数を使用して)を使用してAdd-Migrationスクリプトを実行するようにproject.jsonファイルを設定する方法があることを期待していました。

これにより、開発中に手動で移行を作成することができましたが、各リリースプロセスの最終段階で私の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); 
} 
関連する問題