Entity Framework Code Firstを使用してプロジェクトを開始しました。準備ができたら、データベースとコードをホストプロバイダーにアップロードしました。すべてがうまくいった。
クラスの1つに新しいフィールドを追加する必要があり、データベースのデータを失いたくありません。そのため、Code First Migrationsの使用に関するブログ投稿をいくつか試してみました。私は次のことをしました:
サイトにアクセスすると、次のエラーメッセージが表示されます。 'blahblah'コンテキストをサポートするモデルは、データベースが作成されてから変更されています。 Code First Migrationsを使用してデータベースを更新することを検討してください。
何が悪いのですか?
移行テーブルが同期されていないことを示唆する私の経験から(データが同期されていない場合でも)、それは現在、dbスキーマの一部になっています(4.3以降、システムテーブルの下)。
そのエラーが発生する理由と方法はたくさんありますが、ほとんどの場合...
問題のある部分は、データベース全体を手動でバックアップ/復元することと、コードを変更することの組み合わせです-なぜ常にそうであるかは完全にはわかりません。
つまり、Db-sが同じであっても、移行テーブルのデータは同じではない可能性があり、ハッシュ比較が失敗する可能性があります(それでも完全な復元は十分に聞こえますが、「両側」があります)。
私にとってうまくいくのは使用することですUpdate-Database -Script
これにより、「移行の違い」を持つスクリプトが作成されます。
ターゲットサーバーデータベースにSQLスクリプトとして手動で適用できます(適切な移行テーブルの行が挿入されるはずです)。
それでもうまくいかない場合は、次の2つのことを行うことができます...
移行テーブルを削除します(ターゲット-システムテーブルの下)-に従って http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations- walkthrough.aspx コメントがそこにあります-以前の動作にフェールバックする必要があり、Db-sが同じであることを確信している場合は、「信頼する」だけです。
私が使用した最後の手段として、Update-Database -Script
完全なスキーマの(たとえば、「完全なスクリプト」を強制する空のdbを初期化することにより)、
を見つける INSERT INTO [__MigrationHistory]
記録、
それらを実行し、データベースに挿入するだけです。
そしてあなたのデータベースとコードが一致していることを確認してください、
これで物事は再び同期するはずです。
(免責事項:これは常に機能するための完全な証拠ではありません。ローカルのシナリオを考えると、いくつかのことを試す必要があるかもしれませんが、同期する必要があります)
ステップ6では、Update-Database -Verboseを実行する必要があると思います。
また、このリンクは、EFでScaffoldingを使用してデータベースを更新する場合に非常に役立ちます http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-entity-framework -scaffolding-and-migrations