我正在尝试使用CTP4预览将代码为首的Entity Framework添加到已与测试数据一起运行的MVC应用程序中。

我目前收到此错误:

自创建数据库以来,支持“SchedulerContext”上下文的模型已更改。手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer。例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可以选择使用新数据作为种子。

我根本不想生成数据库,因为我已经有一个数据库。因此,我尝试将以下内容添加到SchedulerContext构造函数中:

Database.SetInitializer<SchedulerContext>(new CreateDatabaseOnlyIfNotExists<SchedulerContext>());

根本没有效果-下次运行时出现相同的错误。该错误似乎是在执行访问数据库的LINQ语句时发生的,我认为是第一个错误。

我应该在哪里发表这个声明,或者这完全是解决这个问题的答案?

最佳答案

更新

我只是简单地掩盖了您已经拥有一个数据库并且不想创建另一个数据库的事实……在这种情况下,答案是将其放入SchedulerContext类中

protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) {
    modelBuilder.IncludeMetadataInDatabase = false;
}

旧答案

您通常将其放在Global.asax中
protected void Application_Start() {
    Database.SetInitializer<SchedulerContext>(new CreateDatabaseOnlyIfNotExists<SchedulerContext>());
}

请注意,它将仅在首次使用数据上下文时初始化。

更新
public class DataContextInitializer : CreateDatabaseOnlyIfNotExists<SchedulerContext> {
    protected override void Seed(SchedulerContext context) {
    }
}

然后像这样修改SetInitializer。
System.Data.Entity.Infrastructure.Database.SetInitializer<SchedulerContext>(new  DataContextInitializer());

关于c# - Entity Framework CTP4 : where to put SetInitializer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3672919/

10-08 21:49