【问题标题】:The model backing the 'ScopoContext' context has changed since the database was created. Consider using Code First Migrations to update the database自数据库创建以来,支持“ScopoContext”上下文的模型已更改。考虑使用 Code First 迁移来更新数据库
【发布时间】:2016-09-22 07:41:24
【问题描述】:

背景:一切都很顺利,直到我创建了一个新的模型类并更改了一个现有的模型类。我迁移成功。

情况是我每次构建项目时都必须运行 add-migration 和 update-database 以避免此异常。我不知道是怎么回事。请帮忙。

附加:自动迁移设置为 true。我检查了 _MigrationHistory 表,每个迁移都存在于那里

【问题讨论】:

  • OnModelCreating 添加到您的YourDbContext
  • 请您再解释一下。我正在开发一个现有项目,该项目已经使用大量代码实现了该方法:modelBuilder.Entity<account>() .HasMany(e => e.useraccount) .WithRequired(e => e.account) .WillCascadeOnDelete(false); 我需要在这里手动添加我的新模型类吗?

标签: asp.net ef-code-first entity-framework-6


【解决方案1】:

您必须将代码添加到您的 DbContext 类:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer<YourDbContext>(null);
    base.OnModelCreating(modelBuilder);
} 

编辑:
首次创建模型时,我们运行DatabaseInitializer 来执行诸如创建数据库(如果数据库不存在)或添加种子数据之类的操作。

默认 DatabaseInitializer 尝试将使用模型所需的数据库架构与存储在使用数据库创建的 EdmMetadata 表中的架构哈希进行比较(当 Code First 是创建数据库的人时)。

现有数据库没有EdmMetadata 表,因此没有哈希,如果该表丢失,今天的实现将抛出。

在发布失败版本之前,我们将努力改变这种行为,因为它是默认设置。在此之前,现有数据库通常不需要任何数据库初始化程序,因此可以通过调用以下方法为您的上下文类型关闭它:

Database.SetInitializer<YourDbContext>(null);

【讨论】:

  • 非常感谢。让我再试验一下:)
猜你喜欢
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
相关资源
最近更新 更多