148

Web サイトで最初に Entity Framework コードを使用していますが、移行コードをデバッグする方法があるかどうか疑問に思っています。ブレークポイントの設定などです。

パッケージ マネージャー コンソールを使用してデータベースを更新していますUpdate-Database

ありがとう

4

7 に答える 7

12

データベース移行でブレークポイントに到達するには、初期化時にコンテキストを MigrateDatabaseToLatestVersion に設定します。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<EnterContextHere, Configuration>());

次に、通常どおりにデバッグするだけで (f5 を使用して実行)、プロジェクトを初めて実行したときにブレークポイントがヒットします。

ここでの問題は、2 回目のデバッグを行うと移行が実行されないことです。これは、__MigrationHistoryテーブルが更新され、最新バージョンに移行したことを示すためです。移行を再テストするには、パッケージ マネージャー コンソールを開き、以前の移行にダウングレードします。

Update-Database –TargetMigration: ThePreviousMigrationName
于 2014-03-10T11:09:14.687 に答える
9

私の答えは少しばかげているかもしれませんが、とにかくここに行きます。私のように、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();
    }
}

少し不十分な解決策であることはわかっていますが、シンプルで迅速です。もちろん、これはモデルの作成後に行う必要があります。ステップバイステップ:

  1. シード メソッドをコメントし、update-database を実行してモデルを作成します。
  2. メソッド Seed() のコメントを外し、前述の「ハック」をプラグインします。

  3. 構成で自動移行を無効にする

    AutomaticMigrationsEnabled = false;//これを既に無効にしている場合は、この手順をスキップしてください

  4. アプリケーションをデバッグし、エラーを修正して「ハック」を取り除きます

于 2014-10-25T22:23:47.313 に答える
4

Console.WriteLine ステートメントを移行コードに追加できます (優れたソリューションではありません)。

migrate.exeメッセージは、ユーティリティを使用して移行コードを実行した場合にのみ表示されることに注意してください( pacakges\EntityFramework.x.y.z\tools)。パッケージ マネージャー コンソールを使用して移行を実行した場合、それらは表示されません。

于 2013-07-05T15:11:24.280 に答える
0

また、ここでエラーの詳細を取得するための巧妙なトリックを見つけました...

基本的に、秘訣は、例外からすべての情報を取得し、それを文字列に入れ、生成された文字列と元の例外を使用して新しい DbEntityValidationException をスローすることです。

于 2015-06-09T16:45:20.600 に答える