0

私は、既存のデータベース上でコード ファーストのアプローチでアプリを開発してきました。

移行を実行する必要があるのは今だけです。モデルが変更されたときにこのデータベースを破棄したくありません。これは、データベースが非常に大きく、適切なサンプル データが含まれているためです。

適用する保留中の変更があることをフレームワークが通知せずに移行を実行するにはどうすればよいですか? (Railsからの移行を行うと、コードはとにかく実行されます-ここから移行したいと思います)

削除/再作成したくない大量のシード済みデータを含む大きなデータベースで作業しているため、自動移行を設定したくありません。また、何が作成され、いつ削除されるかを制御したいと考えています。

これは、本番環境に移行するときにも必要です。手動ではなく、移行を介して変更をロールアウトしたいのです。必要なフィールドを追加/削除して移行し、EF が自分の作業を気にしないようにするにはどうすればよいですか?

(Rails のように) どのバージョンにあるかを知っている場合、私が望むマイグレーションを実行できると思わせるように彼女をだますことができますか?

初期化子を次のように設定すると思いました:

Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>

1エーカーかかりますが、そうではありません。

4

2 に答える 2

1

タイトルの質問に答えるには、__MigrationHistoryテーブルとデータベースに違いがあることを EF に伝える sys テーブルがあるためです。

それを行う方法に関する限り(パッケージマネージャーコンソールから):

  • Enable-Migrations
    • 構成クラス セット内AutomaticMigrations = false;
    • Database.SetInitializer<Context>(null)DropCreate または Update しないように設定します
  • AddMigration <name>変更モデルへの保留中の変更をキューに入れる
  • Update-Databaseメソッドを呼び出して、MigrationName.Up変更を加えてデータベースを変更します(データを失うことはありません)。
于 2013-07-26T18:23:05.027 に答える
1

EF が移行名/順序を格納するために使用するテーブル "__MigrationHistory" があります。このテーブルを開発環境でバックアップしてから、これらのレコードを削除できます。本番環境にデプロイするときは、移行を実行します。別のオプションは、データベース比較 (dev / prod) を使用し、スクリプトを取得してテーブル / データを変更することです。

于 2013-07-26T18:23:22.423 に答える