2

私は最近、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して、世界を再び幸せな場所にする方法はありますか?

4

2 に答える 2

2

AutomaticMigrationsDisabledExceptionここでは間違いなく誤解を招きます。

この投稿が問題の解決に役立つと思います。http://www.diaryofaninja.com/blog/2013/12/05/sorrow-and-elation-ndash-why-reflection-isnt-always-your-friend .

サーバー上でfuslogvw ( http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx ) を実行して、Web サイトで見つけにくいアセンブリを見つけることをお勧めします。

おそらく、nuget パッケージを同期させるだけの問題です。

于 2014-05-20T13:17:02.443 に答える