我希望能够通过web.config指定是否通过EF删除整个数据库,所以我创建了一个简单的模式来执行此操作。首先,我创建了两个类,如下所示:
public class AppDbInitializerDropCreateDatabaseIfModelChanges : DropCreateDatabaseIfModelChanges<AppDbContext> {}
public class AppDbInitializerDropCreateDatabaseAlways : DropCreateDatabaseAlways<AppDbContext> {}
在每个类上,我重写Seed
方法以放入数据初始值设定项
protected override void Seed(AppDbContext context) {
//This contains all data to be initialised on the database
new AppDbDataInitializer();
}
我通过一段代码相应地调用这些类:
public static void Initialize() {
var dropModeConfig = ConfigurationManager.AppSettings["DatabaseDropMode"];
var dropMode = DatabaseDropMode.NoDrop;
if (dropModeConfig == "DropCreateDatabaseAlways")
dropMode = DatabaseDropMode.DropCreateDatabaseAlways;
if (dropModeConfig == "DropCreateDatabaseIfModelChanges")
dropMode = DatabaseDropMode.DropCreateDatabaseIfModelChanges;
Drop(dropMode);
}
这在我之前的项目中运作良好。但是在我的最新版本中,它给了我这个错误:
Declaration referenced in a method implementation cannot be a final method
甚至更奇怪的是,如果我注释掉调用我的初始化程序的代码,则会在后台调用我的DbContext
类。