Web サイトで最初に Entity Framework コードを使用していますが、移行コードをデバッグする方法があるかどうか疑問に思っています。ブレークポイントの設定などです。
パッケージ マネージャー コンソールを使用してデータベースを更新していますUpdate-Database
。
ありがとう
Web サイトで最初に Entity Framework コードを使用していますが、移行コードをデバッグする方法があるかどうか疑問に思っています。ブレークポイントの設定などです。
パッケージ マネージャー コンソールを使用してデータベースを更新していますUpdate-Database
。
ありがとう
データベース移行でブレークポイントに到達するには、初期化時にコンテキストを MigrateDatabaseToLatestVersion に設定します。
Database.SetInitializer(new MigrateDatabaseToLatestVersion<EnterContextHere, Configuration>());
次に、通常どおりにデバッグするだけで (f5 を使用して実行)、プロジェクトを初めて実行したときにブレークポイントがヒットします。
ここでの問題は、2 回目のデバッグを行うと移行が実行されないことです。これは、__MigrationHistoryテーブルが更新され、最新バージョンに移行したことを示すためです。移行を再テストするには、パッケージ マネージャー コンソールを開き、以前の移行にダウングレードします。
Update-Database –TargetMigration: ThePreviousMigrationName
私の答えは少しばかげているかもしれませんが、とにかくここに行きます。私のように、Seed() メソッドで問題が発生することがある場合、私は通常、Protect Seed() を呼び出すパブリック メソッドを作成するだけです。
public void SeedDebug(AppDbContext context)
{
Seed(context);
}
次に、HomeController で、このメソッドをデバッグ モードで呼び出します。
public class HomeController : Controller
{
var appDb = new AppDbContext();
public ActionResult Index()
{
var config = new Configuration();
config.SeedDebug(appDb);
return View();
}
}
少し不十分な解決策であることはわかっていますが、シンプルで迅速です。もちろん、これはモデルの作成後に行う必要があります。ステップバイステップ:
メソッド Seed() のコメントを外し、前述の「ハック」をプラグインします。
構成で自動移行を無効にする
AutomaticMigrationsEnabled = false;//これを既に無効にしている場合は、この手順をスキップしてください
アプリケーションをデバッグし、エラーを修正して「ハック」を取り除きます
Console.WriteLine ステートメントを移行コードに追加できます (優れたソリューションではありません)。
migrate.exe
メッセージは、ユーティリティを使用して移行コードを実行した場合にのみ表示されることに注意してください( pacakges\EntityFramework.x.y.z\tools
)。パッケージ マネージャー コンソールを使用して移行を実行した場合、それらは表示されません。
また、ここでエラーの詳細を取得するための巧妙なトリックを見つけました...
基本的に、秘訣は、例外からすべての情報を取得し、それを文字列に入れ、生成された文字列と元の例外を使用して新しい DbEntityValidationException をスローすることです。