Cyn*_*hia 6 .net c# entity-framework asp.net-mvc-2
我试图使用CTP4预览将实体框架(代码优先)添加到使用测试数据运行的MVC应用程序.
我目前收到此错误:
自创建数据库以来,支持"SchedulerContext"上下文的模型已更改.手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer.例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可选择使用新数据对其进行种子设定.
我根本不想生成数据库,因为我已经有了一个数据库.所以我尝试将以下内容添加到SchedulerContext构造函数中:
Database.SetInitializer<SchedulerContext>(new CreateDatabaseOnlyIfNotExists<SchedulerContext>());
Run Code Online (Sandbox Code Playgroud)
它完全没有效果 - 下次运行时我得到了同样的错误.当它执行访问数据库的LINQ语句时,似乎发生了错误 - 我认为第一个.
我应该把这个陈述放在哪里,或者这个陈述是否是这个问题的答案?
我只是掩饰你已经有一个数据库和事实不希望创建一个又一个......在这种情况下,答案是把这个在您的SchedulerContext类
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) {
modelBuilder.IncludeMetadataInDatabase = false;
}
Run Code Online (Sandbox Code Playgroud)
您通常将它放在Global.asax中
protected void Application_Start() {
Database.SetInitializer<SchedulerContext>(new CreateDatabaseOnlyIfNotExists<SchedulerContext>());
}
Run Code Online (Sandbox Code Playgroud)
请注意,它仅在首次使用数据上下文时初始化.
public class DataContextInitializer : CreateDatabaseOnlyIfNotExists<SchedulerContext> {
protected override void Seed(SchedulerContext context) {
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样修改SetInitializer.
System.Data.Entity.Infrastructure.Database.SetInitializer<SchedulerContext>(new DataContextInitializer());
Run Code Online (Sandbox Code Playgroud)