6

私は最初にEFコードを初めて使用します。運用環境に既存のデータベースがあり、最初に EF 4.3.1 コードを使用したところ、すべてが機能しました。データベーススキーマを更新したところ、例外が発生しました

System.InvalidOperationException: The model backing the 'MyDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

本番なので使えないDropCreateDatabaseIfModelChangesのですが、スキーマ変更に対応する一番簡単な方法は何ですか?

ありがとうございました。

4

6 に答える 6

6

EF-CFの移行はかなり新しい概念であるため、古くからの実績のあるプロセスを採用し、EFなどの新しいツールで動作するように変更することをお勧めします。これが私たちが行うことです:

  1. DropCreateDatabaseIfModelChangesローカル開発に使用します。これにより、ローカル開発コピーをモデル(コード内)と同期させることができます。ビルド/実行するたびに、更新されたローカルデータベースを取得します。イニシャライザを使用して、テストデータなどをロードすることもできます。Database.SetInitializer<DBContextNameHere>(new DBContextInitializerNameHere());

  2. RedGateのSQLCompareツールを使用して、ローカル開発者と本番環境を比較し、展開用の変更スクリプトを自動的に生成します。(注:ツールから自動展開することもできます)

http://www.red-gate.com/products/sql-development/sql-compare/index-b

主な利点は、ローカルの開発プロセスを変更する必要がなく、生成されたスクリプトを介して反復可能でバージョン管理されたデプロイメントを取得できることです。これをSQLソース管理ツールと組み合わせて、すべてのSQLオブジェクトと展開スクリプト(データも含む)をソース管理に保持することもできます。

いいえ、私はこれらの人のために働いていません。私は彼らのツールが大好きで、それがこの同じ問題でどのように私を助けたか。

于 2012-06-12T17:13:29.213 に答える
4

Entity Frameworkの移行を使用して、新しいモデルに一致するようにデータベースを自動的に更新することを検討できます。

http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

于 2012-06-11T14:22:08.753 に答える
3

次のスクリプトを実行していることがわかりました

truncate table __MigrationHistory

コード/データベースが同期しなくなったときに、データベース上でこの問題を解決します。

たぶん、私は古い学校に慣れていて、データベース設計を構築していじくり回したり、それに応じてコードを変更したり、コーディング中に新しいフィールドが必要であることを発見したりしています...両方の場所に追加するだけです。

私は新しい(っぽい)ことを認めMVCますが、これらの種類の機能は、物事が基本的なレベルでどのように機能するかを隠しているため、役に立たないことがあります. すべてがどのように組み合わされるかを理解すると、ジェネレーターとツールが役に立ちますが、最初は... 良いとは思いません。

コードジェネレーターやウィザードなどを使用するために単純な概念を理解していない多くの開発者に出くわしました.実際のプログラミングやレガシーシステムの保守に関しては、彼らは少し迷っています..

于 2013-12-04T22:29:19.733 に答える
0

追加してこの問題を解決しました

Database.SetInitializer<MyContext>(null); to Application_Start() inside Global.asax.cs
于 2014-02-05T09:15:00.523 に答える
0

これが発生した場合、通常、新しいデータベースを指すように移行を実行します。このデータベースが作成されたら、新しいデータベースの構造を既存のデータベースと比較します。必要に応じて、手動で変更を行います (そうしないと、エラーの原因 - 意図しないスキーマの変更やインデックスなど) を元のデータベースの __MigrationHistory テーブルのエントリを削除し、新しいデータベースからエントリをコピーして、__MigrationHistory が正しくなり、Code First が正しく同期されるようにします。

于 2013-12-05T14:56:01.063 に答える
-1

このコードがあなたに完全に役立つことを願っています

EF-コードの最初の移行

于 2013-11-12T05:09:37.103 に答える