1

だから私はEntity Framework Code First Migrationsを使用しています。

モデルに変更を加え、新しい手動移行を追加すると、up スクリプトが間違ってしまいます。

そのため、移行を削除すると同時に、思ったように変更するつもりはありません。移行クラスを削除し、モデルをリセット (元の状態に戻す) したら、モデルを再度変更します。

新しい移行を生成すると、この移行は、削除したものから変更されているかのように機能します。

移行をクリーンアップして削除する場合、エンティティ フレームワーク コードはどのようにして最後のモデル状態を最初に認識しますか?

そして、これをどのようにリセットしますか?

4

2 に答える 2

2

データベースで、[テーブル/システム テーブル] の下 (SQL Management Studio を使用していると仮定) で、Table __MigrationHistory.

すべての移行* .csファイルを削除した後、まだVSが古い移行について「知っていた」ので、私もつまずきました!!

于 2012-09-20T07:16:41.397 に答える
0

その下にある、自動移行に関する情報を含む Designer ファイルをその時点まで削除していない可能性があります。

http://msdn.microsoft.com/en-US/data/jj554735

Add-Migration AddBlogRating コマンドを実行します...

移行には、一部のメタデータをキャプチャするコード ビハインド ファイルもあります。このメタデータにより、Code First Migrations は、このコードベースの移行の前に実行した自動移行をレプリケートできます。これは、別の開発者が移行を実行したい場合、またはアプリケーションをデプロイするときに重要です。

コード ビハインドは、作成した手動移行クラスの下にある 201206292305502_AddBlogRating.Designer.cs のようなファイルです。次のようになります。

public sealed partial class AddBlogRating : IMigrationMetadata
{
    string IMigrationMetadata.Id
    {
        get { return "201206292305502_AddBlogRating"; }
    }

    string IMigrationMetadata.Source
    {
        get { return "H4sIAAAAAAAEAOy9B2AcSZ...=="; }
    }

    string IMigrationMetadata.Target
    {
        get { return "H4sIAAAAAAAEAOy9B2AcSZ...=="; }
    }
}

これらの 2 つの文字列は、移行前と移行後のモデル全体の base64 でエンコードされたダンプです。ログに記録された最初の手動移行より前のものはすべて自動であったため、これらすべてを新しい DB に適用すると、次のように表示されます。

マニュアル
1 マニュアル2

ソースをチェックして Manual1 の前に目標モデルを決定し、自動アプローチを使用して適用し、Manual1 を適用し、Manual2 でソースをチェックし、そこに到達するために自動アプローチを使用し、Manual2 を適用し、最後に自動アプローチを使用してそこから現在のコンパイル済みモデルの状態に到達します。

于 2012-09-11T21:49:04.313 に答える