2013-05-17 9 views
14

戻って、以前の移行にロールの更新とデータベースを実行している、ソースコントロールに支店を変更した後、EFは時々下記のように、テキスト「元に戻す自動移行」を表示します。「自動移行を元に戻す」とはどういう意味ですか?

Reverting automatic migration: 201305171619008_DescriptiveNameForMigration. 
Reverting code-based migration: 201305162023299_Init. 

どのようにEntity Frameworkのは、あることを決定しました移行は自動的に行われるべきですし、それはどういう仕組みですか?

は、ここでは、コード最初の移行すでにセットアップとプロジェクト持っていると仮定し、それを再現する方法は次のとおりです。

  • は、モデル、マッパーへの変更を行い、ソースコントロールの新しいブランチへ

    1. スイッチ、および
    2. バックデフォルト枝に
    3. スイッチ移行
    4. アップデート - データベースを追加、更新、データベース-TargetMigration:0 -Force
    5. Update-Databaseコマンドの結果の「自動マイグレーションを元に戻す」を参照してください。

    これは私が間違っていると私が訂正してくれるものです。

    • アップデート - データベースが__MigrationHistory
    • でマイグレーションを列挙するには、対応する移行ファイルが存在しない場合は、それが最善を行い、プロジェクトに対応した移行ファイルを検索し、ダウン()メソッド
    • を呼び出しますあなたが移行を足場場合は、Entity Frameworkのは__MigrationsHistoryに記録された最後のモデルと現行モデルとの差分を実行し、MIGRATを作成します
  • +0

    私はあなたがうまく起こるが記載されていると思います。 –

    +0

    はあなたに戻って戻っコードでダウン方式ましたか?その後、MigrationHistoryテーブルにあったバージョンを取得するためのパスがありました。あなたが思っていたようなものはありませんか? –

    +0

    右のコードファイルが移行のために存在する場合は、Down()メソッドを使用します。私は、コードファイルが存在しないときにマイグレーションを元に戻すときに、「自動マイグレーションを元に戻す」がどのように機能するのだろうかと思います。 (おそらく、それは新しいSOの質問に適しています)あなたも、「自動マイグレーションを元に戻す」とは、その場でDown()メソッドを生成するということですか? –

    答えて

    3

    __MigrationHistory中のスナップショットに基づいて、移行をロールバックする方法について-guessそのdiffを含むイオンクラス。 Scaffoldされた移行のUpメソッドとDownメソッドの両方を自由に編集できます。

    自動移行は、あなたが足場をスキップしてみましょう。彼らが有効になっていると、あなたがアップデート - データベースを呼び出した場合、それは__MigartionsHistoryに記録されているあなたの現在のモデルの差分と最後のモデルを実行し、「自動」移行を使用して、その差分を適用します。自動移行はまだ__MigrationHistoryのレコードを取得しますが、プロジェクトに追加何のマイグレーションクラスは存在しません。差分のステップは、アップ方式でスキャフォールドされていたであろうことと同じですが、あなたはそれをカスタマイズする機会は決してありません。

    これらの自動移行の1つを元に戻すと、記録されたモデルと以前の移行のモデルの差分が実行されます。これらのステップは、足場をつけたDown法と同じである。

    Entity Frameworkが移行用の移行クラスを見つけられない場合、移行は自動移行であるとみなされます。したがって、Downメソッドをカスタマイズした場合、元に戻すときにこれらのカスタマイズは適用されません。

    これは物事を少し明確にします。

    +0

    自動移行は、対応する移行ファイルなしで変更が検出されたときに記録されることを知っておきましょう。これまでは、変更を取り消しながら、自動メッセージとコードベースのメッセージが混在していることに気がつきました。詳細をありがとう。 :) –

    関連する問題