私は最近、Entity Framework Code First Migrations (EF 5) に支えられた大規模な運用データベースの移動を試み始めました。自動移行を有効にしてコードファースト移行を使用していますoff
Application_Start()
データ層は、次の行に沿って何かを使用して内部でアップグレードされています。
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>(null));
using (var ctx = new MyDbContext()){
ctx.Database.Initialize(false);
}
SQL Management Studio の [SQL Azure にデプロイ] オプションを使用してデータベースを移行し、アプリをそのデータベースに向けた後、次のエラーでデス スピンに陥りました。
保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません。保留中のモデルの変更をコードベースの移行に書き込むか、自動移行を有効にします。自動移行を有効にするには、DbMigrationsConfiguration.AutomaticMigrationsEnabled を true に設定します。
これは嘘です!(またはジョブの間違ったエラー) :-)
ローカルの Visual Studio インスタンスが接続できるようにファイアウォール ルールを設定してから実行するupdate-database -verbose -script
と、結果が空白になります。
PM> update-database -verbose -script
Using StartUp project 'MyProject.Website'.
Using NuGet project 'MyProject.Data'.
Target database is: 'MyNewSQLAzureDB' (DataSource: tcp:xxxxxx.database.windows.net,1433, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
私は気が狂い始めています。
私が試したこと:
- SQL Azure SQL プロバイダーの使用
- ローカル データベースのバックアップと Azure のバックアップの間でスキーマの比較を行います (インデックスが変更されたと仮定しますが、テーブル構造に変更はありません)。
- 古いモデルで行われていたモデル メタ データの比較に違いがあった場合に備えて、EF 6 にアップグレードします。
application_start()
いくつかの異なる方法で移行を行います。
私のアプリは移動前に 2 年以上同じコードベースで動作していたため、これはバグである可能性があると考えています。
私が考えていることは起こっているかもしれません:
- SQL Azure 移行ツールは、私のモデルのいくつかの小さな点を変更しました (クラスター化されたインデックスをすべてに追加します。
- EF DBMigrator のスキーマ比較部分は、これらの変更をスキーマの違いとして認識していますが、 をスローする代わりに、例外データにリストされているモデルの違いなしで
DbEntityValidationException
をスローしています。AutomaticMigrationsDisabledException
誰にもアイデアはありますか?新しいモデルのキャプチャを取得し、テーブルを手動で更新_migrationhistory
して、世界を再び幸せな場所にする方法はありますか?