TeamCity、NUnit、および Git との継続的な統合を使用しています。最近、FluentMigrator から Entity Framework Migrations に移行しました (しゃれを許してください)。私は主に、スキャフォールディング機能を利用するためにこれを行いました。
ただし、最初に変更をマイグレーションにスキャフォールディングしなくても、ソース管理にいくつかの変更をチェックインできる可能性があります (コミットしてコミットをプッシュする前にアプリケーションが実行されなかったシナリオを想像してください)。私は事前テスト済みのコミット ワークフローを使用しているため、migrate.exe を呼び出すまで待つのではなく、事前テストでこの問題を検出したいと考えています (ワークフローでは遅すぎて、「グリーン リポジトリ」が壊れてしまいます)。
私の質問は、移行モデルがコンテキスト モデルと一致しない場合を検出する単体/統合テストを作成して、移行を試みる前にビルドに失敗できるようにする方法です。データベースと一致しないことが予想されるため、テストからデータベースにアクセスしたくないことに注意してください。
私はこのアプローチを試しました:
[Test]
public void CheckWhetherEntityFrameworkMigrationsContextIsUpToDate()
{
Assert.DoesNotThrow(() =>
{
CallDatabase();
});
}
private void CallDatabase()
{
using (var ctx = new MyContext("SERVER=(local);DATABASE=MyDatabase;Integrated Security=True;"))
{
var tenant = (from t in ctx.Tenant
select t).FirstOrDefault();
}
}
ただし、保留中の移行がある場合、これは常に失敗します(移行モデルがコンテキストモデルと同期していない場合ではなく、これが私が求めているものです)。
アップデート
この問題の EntityFramework プロジェクトに作業項目を追加しました。うまくいけば、彼らはこれを行う方法を追加することを検討します.