2016-09-07 7 views
0

SQL Serverデータベースを使用するWindowsアプリケーションを開発しています。私はこのアプリケーションのさまざまなバージョンを持っていて、彼らは異なるデータベース構造を持っているので、アプリケーションの開始時に最新のバージョンにデータベースを移行する必要があります。データベース構造とアプリケーションモデルを比較し、コマンドを変更、作成、または削除したいと考えています。データのあるコードと既存のデータベース

また、EF Code-First ORMを使用したいと思っています。いくつかの検索の後に、いくつかの便利なコマンドと設定が最初にあることが分かりました。しかし、問題は、私が知っているように、それらのすべてが既存のデータベースを削除し、新しいデータベースを作成するため、データが必要な間にデータが失われるためです。

私は自分のアプリケーションの起動機能にこれらの行を使用:

var migrator = new DbMigrator(new Configuration()); 
migrator.Update(); 

しかし、実行された後、この行は、私は、この例外が発生します:

There is already an object named 'SomeTable' in the database. 

私はそれが正しいだと、そのテーブルがある、ということを知っています構造が変わった!どのように構造を比較し、残りをすることができますか?

答えて

0

そうではありませんhow migrations work. EFが__MigrationHistoryテーブルをチェックし、それが適用されているかどうかを確認できるように、データベースのすべてのバージョンの移行が必要です。初期化子がMigrateDatabaseToLatestVersionに設定されていると、モデルの変更時にデータベースが再作成されません。

あなたは歴史を再作成しようとすることができます:バックあなたの最も古いデータベースにロール、移行を追加し、2番目の最も古いバージョンの変更を追加し、第二の移行を作成するなど

別のオプションは、あなたのための移行を追加することですスクリプトを生成し(update-database-Script)、それを適用する前に各デプロイされたデータベースに存在するものをコメント化します。

さらに別のオプションは、各データベースと現在のデータベースに対してVS Schema compare utilityを使用して変更を適用することです。その後、それぞれにベースライン移行を適用します(移行を追加する初期の-IgnoreChanges)。

ここで、一連の移行を生成することができ、コードは期待どおりに動作するはずです。

関連する問題