支持' DataContext'自创建数据库以来,上下文已更改

时间:2015-02-02 11:19:34

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

我正在尝试使用Code First with Migrations。即使我的模型目前没有变化,我也会遇到异常。当我添加一个迁移时,up和down都是空的,但是我收到一条运行时错误消息,如下所示:

  

类型' System.InvalidOperationException'的例外情况发生在   EntityFramework.dll但未在用户代码中处理

     

附加信息:支持' MyDataContext'上下文   自数据库创建以来已更改。考虑使用Code First   迁移以更新数据库(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没有看到模型中的任何变化,为什么我在运行时会出现此错误?为什么种子代码没有被击中?如何解决这个问题,或者如果无法确定,我该如何进一步确定根本原因?

4 个答案:

答案 0 :(得分:19)

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

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

文章还讨论了不生成它的选项我想通过使用这个指令:Database.SetInitializer<MyDbContext>(null);但是我没有使用它,所以我不确定它是否像那样工作

答案 1 :(得分:7)

这对我有用。

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

答案 2 :(得分:0)

我敢打赌你的数据上下文没有连接到连接字符串。 检查它是否未使用localdb(类似(localdb)\v11.0)进行初始化,如果您认为它已设置为其他内容,则不使用它。

答案 3 :(得分:0)

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