我有一个DBConfiguration,其构造函数只有一行:
SetDatabaseInitializer(new MigrateDatabaseToLatestVersion<SchedulingReadContext, Configuration>());
对于测试,我试图通过在SetUp中执行以下操作来使用不同的初始化程序
Database.SetInitializer(new DropCreateAndMigrateDatabaseInitializer<SchedulingReadContext, Configuration>());
using (var context = new SchedulingReadContext())
{
context.Database.Initialize(true);
}
但是在调试时如果我进入Database.SetInitializer,我最终会进入DBContext构造函数,因此我的DatabaseInitializer不会更改。
任何解决方案都会有所帮助,谢谢
答案 0 :(得分:2)
您需要有条件地设置数据库初始化程序,这样您才能只调用Database.SetInitializer
一次。
我通常在web.config中使用appSetting,它表示应用程序运行的环境如下:
<add key="EnvironmentIn" value="development"/> // change this to whatever environment you are working in
然后在DbConfiguration的构造函数中检查此设置并相应地设置初始化程序:
if (ConfigurationManager.AppSettings["EnvironmentIn"] == "development")
{
SetDatabaseInitializer(new DropCreateAndMigrateDatabaseInitializer<SchedulingReadContext>());
}
else
{
SetDatabaseInitializer(new MigrateDatabaseToLatestVersion<SchedulingReadContext, Configuration>());
}