7

SQL Azure データベースを使用するアプリケーションで EF 移行を使用しています。SQL Azure で手動でテーブルを削除するまでは、問題なく動作していました。削除されたテーブルが SQL Azure に作成されないアプリケーションを公開すると、これは私が得るエラーです。

Cannot find the object "dbo.TableName" because it does not exist 
or you do not have permissions.

データベースと自分のモデルの間に不整合が生じたように感じます。

自動移行を使用しています。

4

1 に答える 1

4

そもそもなぜテーブルを削除したのですか?再作成しますか?

トリッキーなソリューションに入る前に、 -TargetMigration オプションを使用して、テーブルが作成されている移行の直前の移行にロールバックしようとしましたか? そこにない fk のテーブルまたはインデックスを削除しようとすると、SQL エラーが発生する気がしますが、試してみる価値はあります。このコマンドを使用してこれを行うことができますupdate-database -TargetMigration YourOldMigration。これにより、移行ファイルの Down() メソッドにあるコマンドを実行して、ターゲットの移行後に適用されたすべての移行がロールバックされます。SQL エラーが発生する場合は、エラーを回避するために Down() メソッドの内容を変更してみてください。気をつけろ。これにより、データが失われる可能性があります。EF がこれについて警告し、気にしない場合。コマンドの最後に -Force を追加してみてください。

代わりに、さらに....

移行は、db スキームを dbcontext/models と比較するだけで計算されるわけではありません。SQL Server Management Studio で SQL Azure データベースを開くと、__MigrationHistory というテーブルが表示されます。自動移行によってデータベースに適用されたすべての移行が保存されます。

開始する前に、最後までお読みください。飛び込む前に考慮すべき要素がいくつかあります。これをまだ操作していないと仮定すると、最初にテーブルを作成した変更セットの行を見つけることができるはずです。その行を削除します。これで、EF 自動移行は、その変更がまだ DB に適用されていないと見なします。update-database を実行すると、再実行が試行されます。

その移行ファイルに他の変更があった場合は、それらも再実行しようとします。これにより、あらゆる種類の sql エラーが発生する可能性があります。その移行の一部でもあったすべての変更を手動でロールバックすることをお勧めします。データの損失が心配ですか? 手動で作成したテーブルにデータをコピーして、終了するまで保存してみてください。移行が機能したら、データを新しいテーブル/列にコピーして戻すことができます。

ダブル代替。開発にそれほど時間をかけず、データ損失についてあまり心配していない場合は、データベース全体を削除して、自動移行で最初から再作成する方が簡単な場合があります。

それがあなたをそこに連れて行くことを願っています

于 2012-12-20T12:31:21.180 に答える