2016-06-29 4 views
0

この問題の原因はおそらく私にはあると思いますが、Entity Frameworkに「回復」することはできません。状況は私が新しい移行を作成しており、Entity Frameworkがモデルのすべての変更を検出していないということです。それはいくつか(最新の)ものを検出しますが、前のものは検出しません(どちらもマイグレーションなし)。エンティティフレームワークの移行ですべての変更が検出されない

なぜこのようなのですか、最初にモデルにいくつか変更を加えて移行を作成しました。すべてが完璧でした。それから、モデルをもう一度変更しました。それはすべて私の開発マシンだけだったので、以前の移行を削除して再作成しました。これが問題の始まりです。私はマイグレーションを一切削除してはならないことを知っていますが、何が行われたのです。

私はDB(LocalDB)を核とすることを決定しました。すべての変更がない最新の移行ファイルが必要です。次に、データベースを更新して、新しい移行を追加しようとします。まだすべての変更はありません。

私は、EFがモデルのスナップショットの一部を私が見ることができないどこかに保持していると思っています。どこ?どのようにこの状況から回復し、EFにモデルの欠落した変更を伴う移行を再作成させるかについてのアイデアはありますか?

答えて

1

EFは既に発見したように、移行間のモデルの変更を追跡するためのHashcodeを保持しています。これはあなたのデータベースの[dbo].[__MigrationHistory]の表を見れば分かります。

既に適用されている移行の.csファイルを単に削除するだけではいけません。代わりに、次の操作を行います

1)Update-Database -TargetMigration [Name of the migration right before the migration you want to delete]

2を使用して、古い移行をロールバック)

3古い移行する.csファイルを削除します)、私はあなたがまだ削除されたと思っているAdd-Migration

を使用して新しい移行を追加します。移行先の.csファイルをどこかに置いてください。そうしないと、ロールバックが問題になることがわかります。/新しいデータベースで始める場合は、最後の正常な移行に更新して(-TargetMigrationパラメータを再度使用)、そこから開始してください。

+0

問題の主な原因は、以前の移行resxファイルに「無効な」ターゲットハッシュが格納されていることが原因だったようです。私は元のターゲットを復元し、それを動作させるために述べたような手順に従った。 –

関連する問題