调试程序包管理器控制台更新 - 数据库种子方法

Sac*_*nth 103 entity-framework-5

当我从Package Manager控制台运行update-database但不知道如何操作时,我想在我的Entity Framework数据库配置类中调试Seed()方法.我想与其他人分享解决方案,以防他们遇到同样的问题.

Eth*_*thR 151

这是一个类似的问题与一个非常有效的解决方案.
它不需要Thread.Sleep.
只需使用此代码启动调试器.

从答案中删除

if (!System.Diagnostics.Debugger.IsAttached) 
    System.Diagnostics.Debugger.Launch();
Run Code Online (Sandbox Code Playgroud)

  • 有效,但开辟了新的视觉工作室. (6认同)
  • 我一直在使用这种方法,效果很好. (2认同)

Sac*_*nth 20

我解决这个问题的方法是打开一个新的Visual Studio实例,然后在这个新的Visual Studio实例中打开相同的解决方案.然后,我在运行update-database命令时将此新实例中的调试器附加到旧实例(devenv.exe).这允许我调试Seed方法.

为了确保我没有错过断点,没有及时附加我在断点之前添加了Thread.Sleep.

我希望这可以帮助别人.


ced*_*lof 12

如果您需要获取特定变量的值,快速入侵是抛出异常:

throw new Exception(variable);
Run Code Online (Sandbox Code Playgroud)

  • 快又脏:) (3认同)

Jes*_*ind 5

恕我直言,更干净的解决方案(我猜这需要EF 6)是从代码中调用update-base:

var configuration = new DbMigrationsConfiguration<TContext>();
var databaseMigrator = new DbMigrator(configuration);
databaseMigrator.Update();
Run Code Online (Sandbox Code Playgroud)

这使您可以调试Seed方法。

您可以更进一步,构建一个单元测试(或更准确地说,是一个集成测试),该单元测试将创建一个空的测试数据库,应用所有EF迁移,运行Seed方法,然后再次删除该测试数据库:

var configuration = new DbMigrationsConfiguration<TContext>();
Database.Delete("TestDatabaseNameOrConnectionString");

var databaseMigrator = new DbMigrator(configuration);
databaseMigrator.Update();

Database.Delete("TestDatabaseNameOrConnectionString");
Run Code Online (Sandbox Code Playgroud)

但是请注意不要对您的开发数据库运行此命令!