これまでのところ少し謎であり、検索しても答えを見つけることができなかったため、誰かがこの主題に光を当ててくれることを願っています.
最初に EF コードを使用して、既存のデータベースでデータベースの移行を行うアプリがあります。私たちのアプリは 2 つのデータベースを使用し、それぞれのデータベースにアクセスするための個別の DbContext を持つ 2 つの DAL があります。簡単にするために、ソリューションは次のようになります。
解決
- DataAccessLayerA --> データベースA
- DataAccessLayerB --> データベース B
私たちが目にしている問題は、DataAccessLayerA で MigrateDatabaseToLatestVersion 初期化子がうまく機能し、DatabaseA が移行されることです。ただし、DataAccessLayerB では、MigrateDatabaseToLatestVersion 初期化子はまったく何もせず、DatabaseB は移行されません。
DataAccessLayerA で実行しているコードは次のとおりです。
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ContextA, DALA.Migrations.Configuration>());
DataAccessLayerB で実行しているコードは次のとおりです。
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ContextB, DALB.Migrations.Configuration>());
コードをステップ実行すると、両方のコード行が実行され、それぞれが独自の個別のモジュール (PRISM を使用する WPF アプリ) で発生します。
現在、DataAccessLayerB のデータベース移行が機能する唯一の方法は、DbMigrator クラスを明示的に使用して Update() メソッドを呼び出すことです。これにより、データベース内のシステム テーブルの外側に __MigrationHistory テーブルが作成されますが、実際にはデータベースが最新の状態に移行されます。
エンティティ フレームワーク 5.0 を使用しており、AutomaticMigrationsEnabled = false を使用しています。これは、コードベースの移行を使用して、より細分性と制御を高めたいためです。
2番目のクラスに DbMigrator クラスを使用しても問題ありませんが、それが機能しない理由を本当に理解したいと思います。Julie Lerman によるチュートリアルを何度か見て、コード ファーストの移行に関するドキュメントをオンラインで読んだことがありますが、これに対する答えはまだ見つかりません。
何が間違っている可能性があるかについての情報は大歓迎です。