12

Entity Framework 4.1 Code First で作成された運用中のシステムがあります。今、私は 4.3 にアップグレードし、移行を適用する必要がありますが、カバーする必要があるいくつかの使用例があります。

  1. 新しい開発者は、シード データを使用してゼロから作成されたデータベースを必要としています。(Seed()メソッドは、いくつかの一意のインデックスも適用します。)
  2. 本番環境では、未適用の変更のみを適用する必要があります。(ただし、この DB は移行がない EF 4.1 で作成されたことに注意してください。)

これらの両方のケースをカバーする移行と初期化子 (または初期化子) を作成するにはどうすればよいですか?

4

1 に答える 1

28

運用データベースは EF 4.1 で作成されているため、 Migrationsで使用できるようにするには、少し作業を行う必要があります。開発環境で実行されている現在の本番コードのコピーから始めます。dev データベースが存在しないことを確認してください。

  1. マイグレーションで EF 4.3 (またはそれ以降) を使用するようにプロジェクトをアップグレードし、現在の本番環境のスナップショットを作成する初期マイグレーションを作成します。

    Update-Package EntityFramework
    Enable-Migrations
    Add-Migration InitialCreate  
    
  2. データベース初期化子を一致する移行コードに置き換えます。

    シード データの場合Seed()は、ファイルのメソッドに追加しMigrations\Configuration.csます。初期化子のメソッドとは異なり、このメソッドは呼び出されるSeed()たびに実行されることに注意してください。Update-Database行を挿入する代わりに、行を更新する (シード データをリセットする) 必要がある場合があります。メソッドはこれAddOrUpdate()を支援します。

    独自のインデックスを移行で作成できるようになったので、それらをUp()InitialCreate 移行のメソッドに追加する必要があります。メソッドCreateTable()を使用するか、メソッドを呼び出すことによって、それらを呼び出しから切り離すことができます。Index()CreateIndex()

    MigrateDatabaseToLatestVersion初期化子を使用して、初期化中に移行を実行できるようになりました。

  3. 実稼働環境をブートストラップするためのスクリプトを入手してください。

    Update-Database -Script
    

    生成されたスクリプトから、テーブルが既に存在するため、ほとんどすべてを削除する必要があります。必要な部分はCREATE TABLE [__MigrationHistory]andINSERT INTO [__MigrationHistory]ステートメントです。

  4. オプションで、EdmMetadata不要になったテーブルを削除します。

これらのことを実行したら、移行を実行する準備ができているはずです。新しい開発者はUpdate-Database、データベースを最初から作成するために実行できますUpdate-Database。また、本番環境に対して実行 (または移行イニシャライザーを使用) して、そこに追加の移行を適用できます。

于 2012-05-15T20:33:52.667 に答える