0

SQL Express (IIS ローカル ホストではない) を使用してローカル ホストから Web アプリケーションを運用環境にデプロイしました。

Web アプリケーションには、コントローラー、モデル、ビュー (MVC) があります。データベーステーブルにいくつかの変更を加えました。新しいフィールドを追加するたびに、次のことを行います。

enable-migrations
add-migration addnewfieldname
update-database -verbose

すべてのモデルが新しいテーブル フィールドで更新されます。上記は、SQL Express を使用するローカル ホスト上の Web アプリケーションでうまく機能しました。

それで、すべての移行とともに本番環境に公開しました。また、本番環境では、SQL サーバーのデータベースのテーブルを変更して、新しく作成されたすべてのフィールドを含めます。

ここで問題が発生します。生産が機能していません。私は何を間違えましたか?エラーページが表示されます。

エラーメッセージは次のとおりです。

データベースが作成されてから、'DefaultConnection' コンテキストをサポートするモデルが変更されました。Code First Migrations を使用してデータベースを更新することを検討してください

アップデート

だから私は解決策を見つけました、これは素晴らしいです!

まず、UserProfile クラスに変更がないことを確認します。最初に web.config で実稼働データベースに接続していることを確認してから、次を実行します。

Enable-Migrations
Add-Migration InitialMigrations -IgnoreChanges
**this below here is key, you need to add the new field one at a time.**
add-migration addnewfield1
update-database

add-migration addnewfield2
update-database


add-migration addnewfield3
update-database

etc.

これにより、空の「InitialMigration」ファイルが生成されます。ここで、必要な変更を UserProfile クラスに追加します。変更が追加されたら、更新コマンドを再度実行します。

update-database -verbose

これで、自動移行が適用され、変更によってテーブルが変更されます。

別のキーとして、SQL Server でテーブルを変更する権限がない場合は、テーブルが変更されないため、スクリプトをシステム管理者に送信してください。これは、上記のすべてを実行した後です。

4

2 に答える 2

0

このエラーは、データベースを手動で更新したときに間違いを犯したため、データベースのモデルにエンティティが反映されていないことを意味します。

  1. 以前は、web.config ファイルの接続文字列を実稼働データベースに変更し、「Update-Database」を実行していました。作業中のデータベースに、失いたくないデータが既に入力されている場合は、テーブルをコピーするだけで済みます。 (Migrations テーブルを含む) をローカル SQL から取得します。

  2. 多くの間違いを犯す可能性があり、EF が機能しない可能性があるため、運用環境でテーブルを手動で更新することはお勧めできません。

これを修正する最善の方法は、データベースからすべてのテーブルを削除し (余裕がある場合)、接続文字列をローカルから運用に変更し (web.config で)、Visual Studio から "Update-Database" コマンドを実行することです。

一部のデータが既に入力されているためにデータベースを削除できない場合は、移行テーブルを含め、Entity Framework が作成したローカルからすべてのテーブルを手動でコピーしてから、移行テーブルにローカルのデータを入力します。役立つかもしれませんが、保証はできません。

于 2013-08-23T13:17:02.167 に答える