8

まず、これらの質問/回答を読みました。

これらはすべて EF5 より前の EF バージョン用のようであり、私の状況はこれらの回答に合わないようです。それでは、私の状況を説明させてください。

  1. 私のアプリケーションは、最初にモデルを使用して EF4 を使用して作成されました。GUI デザイナーを使用してデータベースを設計し、それを使用してデータベースを生成しました。
  2. 数か月間、データベースを実行してデータを収集してきました。私は本当にこのデータを失うことはできません。
  3. コードを分岐し、NuGet を使用して EF5 をインストールし、EF Power Tools を使用してデータベースからモデルを生成しました。新しいクラス ライブラリ プロジェクトを右クリックし、Entity Framework | Reverse engineer code first.
  4. 新しいプロジェクトをスムーズに再参照し、ObjectContext ではなく新しい DbContext を使用するようにプロジェクトを変換し、古いモデルを保持していた EF4 クラス ライブラリを削除することができました。プログラムはうまく機能します!

ここで、Ruby on Rails で少し経験した自動移行を試してみたいと思います。これが私がしたことです:

  1. ランEnable-Migrations。接続文字列と app.config が使用されていたため、少し問題がありましたが、最終的には取得しました。ただし、この MSDN ページには、これにより、最初の移行が自動的に生成され、私がすでに到達しているポイントに到達するはずであることが示されています。そうではありませんでした。
  2. ステップAdd-Migration InitialSchema1で自動的に行われなかったことを達成するために実行しました。これは機能しました。
  3. モデル オブジェクトの 1 つにプロパティを追加し、実行しようとしたところ、次のようAdd-Migration AddSerialToLogEntriesに表示されました。

次の明示的な移行が保留中のため、明示的な移行を生成できません: [201307190100268_InitialSchema]。新しい明示的な移行を生成する前に、保留中の明示的な移行を適用してください。

既存のデータベースに移行を適用しようとして失敗しましたが、これは当然のことです。

上記の他の回答は、基本的に私は運が悪いと言っていましたが、私が言ったように、それらはEntity Frameworkの古いバージョン用でした。ここにオプションはありますか?

この質問を書いているときに、SQL Server Management Studio を使用してデータを SQL スクリプトにエクスポートし、データベース全体を削除し、EF に作成させてから、スクリプトを実行してデータを元に戻すことができるのではないかと考えました...明日時間があれば試してみますが、それがうまくいくかどうか100%確信が持てず、プロセスに挿入されたデータにエラーが発生するのを嫌うので、他のオプションがあるかどうかを知りたいです.

4

2 に答える 2

3

移行を使用して開発環境でデータベースを最初から作成できる状態にする、少し異なるアプローチをお勧めします。

  1. を呼び出すのではなくadd-migration -IgnoreChanges InitialSchema、最初のスキーマ マイグレーションの生成を機能させるようにしてください。あなたが言うように、これは最初に を呼び出したときに発生するはずです Enable-Migrations。これを機能させるには、データベース接続を存在しないデータベースに向けてみてください。

  2. この結果、InitialSchema移行には、データベースをリバース エンジニアリングした時点の状態でデータベースを作成するためのロジックが含まれます。既存のデータベースが存在するすべての環境に展開するまで、 Up()andの内容をコメント アウトする必要があり ます。Down()

  3. 次に、これらのメソッドの内容のコメントを解除し、それ以降、開発環境でデータベースを削除して、

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

    テーブルに移行の完全なセットが含まれます__MigrationHistory 。これがないと、将来的に新しい移行を追加できなくなるため、これは重要です。

于 2013-11-05T16:39:16.937 に答える