无法使用现有DBConfiguration在EF6中重新设置DatabaseInitializer

时间:2014-08-04 13:55:56

标签: c# entity-framework

我有一个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不会更改。

任何解决方案都会有所帮助,谢谢

1 个答案:

答案 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>());
         }