【问题标题】:The model backing the 'DataContext' context has changed since the database was created自创建数据库以来,支持“DataContext”上下文的模型已更改
【发布时间】:2015-04-01 07:55:20
【问题描述】:

我正在尝试将 Code First 与迁移一起使用。即使我的模型当前没有更改,我也遇到了一个例外。添加迁移时,上下都是空的,但出现运行时错误,消息如下:

“System.InvalidOperationException”类型的异常发生在 EntityFramework.dll 但未在用户代码中处理

附加信息:支持“MyDataContext”上下文的模型 自创建数据库以来已更改。考虑使用代码优先 迁移以更新数据库 (http://go.microsoft.com/fwlink/?

我的架构如下:

  • 包含上下文、流体配置和迁移代码的 DataAccess 项目
  • 包含 poco 类的模型项目
  • Web API 和 MVC 项目在各自的 web.config 文件中都包含连接字符串。

另外我有以下代码:

DbInitializer

public static MyDataContext Create()
{
   Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDataAccess.MyDataContext, MyDataAccess.Migrations.Configuration>());
   return new MyDataContext(ConfigurationManager.ConnectionStrings["MyDataContext"].ConnectionString, null);
}

我从 AutomaticMigrationsEnabled = false 开始;在迁移配置构造函数中,因为据我了解,这将允许(并要求)我对何时应用迁移有更多控制权。我也尝试将其设置为 true,但结果相同。

收到此错误后,我添加了一个新迁移,并且 Up 方法为空。我将数据库更新为这个新的迁移,并在 _migrationHistory 表中创建了一条记录,但是当我尝试运行应用程序时仍然收到错误消息。此外,种子数据没有添加到数据库中。

protected override void Seed(MyDataAccess.MyDataContext context)
{
            IdentityResult ir;

            var appDbContext = new ApplicationDbContext();
            var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(appDbContext));
            ir = roleManager.Create(new IdentityRole("Admin"));
            ir = roleManager.Create(new IdentityRole("Active"));
            ir = roleManager.Create(new IdentityRole("InActive"));

            var userNamager = new UserManager<User>(new UserStore<User>(appDbContext));

            //  assign default admin
            var admin = new User { UserName = "administrator", Email = "myAdmin@gmail.com" };
            ir = userNamager.Create(admin, "myp@55word");

            ir = userNamager.AddToRole(admin.Id, "Admin");
 }

在哪里

public class ApplicationDbContext : IdentityDbContext<User>
{
    public ApplicationDbContext()
        : base("MyDataContext", throwIfV1Schema: false)
    {
    }
    ...

问题:如果 Add-Migration 在模型中没有看到任何变化,为什么我在运行时会收到此错误?为什么没有命中种子代码?我该如何解决这个问题,或者如果无法确定,我如何进一步确定根本原因?

【问题讨论】:

    标签: entity-framework ef-code-first entity-framework-migrations


    【解决方案1】:

    我不确定您是否找到了问题的答案,但我在这里找到的另一个答案实际上为我做了: Entity Framework model change error

    我实际上最终删除了 SQL Server 中的 __MigrationHistory 表,我不知道它是自动创建的。

    文章还谈到了不生成它的选项,我认为使用这条指令:Database.SetInitializer&lt;MyDbContext&gt;(null); 但我没有使用它,所以我不确定它是否像那样工作

    【讨论】:

    • 简单地删除所有行似乎也有同样的效果。
    • 在将 LocalDB 导出到 SQL server 时,我没有看到脚本并且 _migrationhistory 与脚本一起移动。你拯救了我的一天,谢谢!
    【解决方案2】:

    这对我有用。

    转到包管理器控制台并运行 - Update-Database -force

    【讨论】:

    • 工作就像魅力!非常感谢。我被困了很多天,最后总是再次克隆整个项目并构建。再次感谢您!
    • 那么,你能告诉我这个过程...在哪里可以找到包管理器控制台这个?
    • 在 Visual Studio --> 工具菜单
    【解决方案3】:

    我敢打赌,您的数据上下文没有连接连接字符串。 检查它是否没有使用 localdb(类似于 (localdb)\v11.0)进行初始化,并且当您可能认为它设置为其他内容时无法使用它。

    【讨论】:

    • +1 当我没有从源代码中检查我的本地连接字符串时,我总是得到这个错误(Git Cherry-pick Local configs)
    【解决方案4】:

    我的问题最终是启用自动迁移和初始化程序 MigrateDatabaseToLatestVersion 之间的冲突,如 here 所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多