3

我的代码中有以下内容:

 DbContext = new DataContext();
 DbContext.Configuration.AutoDetectChangesEnabled = false;

然后在我的控制器方法中:

// GET /api/Applications
public IEnumerable<Application> Get()
{
    return _uow.Applications.GetAll().OrderBy(p => p.Name);
}

但是我仍然收到以下消息:

System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=The model backing the 'DataContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
  Source=EntityFramework
  StackTrace:

有人可以解释为什么会这样。我认为创建上下文后的行会停止此检查。

4

3 回答 3

9

您可以放置​​(这是一个静态方法)

Database.SetInitializer<DataContext>(null);

在你第一次使用你的DataContext. 但请注意,这将关闭它。完毕。如果您的数据库与模型不兼容,您的查询等将失败。

于 2013-03-11T07:53:07.967 回答
0

这是因为您的实体模式在数据库模式方面存在一些差异。错误是说您需要根据代码中的新模型更新数据库模式。

AutoDetectChangesEnabled此错误无关。因为它是关于跟踪数据的变化,而你得到的错误与数据库模式的变化有关。

该错误消息建议您使用代码优先迁移来根据您对数据模型的更改来更新数据库架构。

于 2013-03-11T06:39:08.533 回答
0

您有 2 个选项:

1.null通过将此行放在派生 DbContext 的构造函数中来设置上下文的 Initializer:

Database.SetInitializer<MyContext>(null);

2. 通过在节点内Web.config添加一个来禁用文件中的数据库初始化程序:KeyappSettings

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings>    
    <add key="DatabaseInitializerForType YourNamespace.YourDbContext, YourAssemblyName"
            value="Disabled" />
    </appSettings>
</configuration>

YourNamespace.YourDbContext和替换YourAssemblyName为应用程序中的相应值。

于 2018-11-05T01:26:35.700 回答