gpt4 book ai didi

c# - Entity Framework CTP4 : where to put SetInitializer?

转载 作者:太空狗 更新时间:2023-10-29 20:53:33 27 4
gpt4 key购买 nike

我正在尝试使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com