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)
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)
恕我直言,更干净的解决方案(我猜这需要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)
但是请注意不要对您的开发数据库运行此命令!