数据库中已经有一个名为AspNetRoles的对象。 (实体框架芯)

时间:2016-09-21 07:03:11

标签: asp.net-core asp.net-identity asp.net-core-mvc entity-framework-core

我有一个使用实体框架核心的asp.net核心mvc网站。

我不知道它最初是如何发生的,但我无法克服错误: “数据库中已经有一个名为AspNetRoles的对象”

我最终删除了数据库,删除了所有的迁移.cs文件并从头开始。

我接着试过了 add-migration MyInitialMigration

同样的错误

然后我再次删除了数据库,并尝试了直接 update-database (不添加迁移)

仍然是同样的错误

我尝试将appsettings配置字符串更改为指向新的不存在的数据库。

仍然是同样的错误!

以前在MVC5 / EF6上我遇到过这个错误并使用与此答案相同的方法解决了它: There is already an object named in the database

-Add-Migration Initial -IgnoreChanges

但是,在EFCore中不支持-IgnoreChanges

或者之前在EF6上我通过添加迁移解决了这个问题,然后删除了Up / Down中的所有内容并运行了空迁移。这对EFCore没有效果

我该如何继续?我已经检查了迁移表,它们总是空的,即使它每次都创建了整个数据库。只是似乎没有在迁移表中记录它

4 个答案:

答案 0 :(得分:7)

找到我的问题。

我已按照本教程从EntityFramework加载appsettings: https://docs.asp.net/en/latest/fundamentals/configuration.html#example-entity-framework-settings

在EntityFrameworkConfigurationProvider中,public override void Load()有一个dbContext.Database.EnsureCreated();和一个CreateAndSaveDefaultValues

在这两者之间看起来它正在初始化数据库而不跟踪迁移。

我评论了这些,进行了迁移,它运行良好。希望每次我想要运行迁移时都不必对它们进行评论:/

答案 1 :(得分:2)

更改数据库后发生了此错误(我从生产表中停止使用MSSQLLocalDB并开始使用Sql Server)。

这就是我要做的:

  • 删除迁移文件夹
  • 评论我想应用的最新更改
  • 调用Add-Migration命令:Add-Migration InitialDbChange
  • 注释创建的迁移文件的Up方法中的所有命令(仅保留Down方法的内容)
  • 调用update-database命令:update-database

我现在从数据库中进行了干净的迁移。现在,我的未来更改将从此基准开始。

通过以下链接找到了解决方案:https://cmatskas.com/ef-core-migrations-with-existing-database-schema-and-data/

答案 2 :(得分:1)

我刚刚遇到了同样的问题,看起来像Database.EnsureCreated()不使用迁移,你可以使用Database.Migrate()而不是我刚刚尝试过的,似乎工作,但时间当我尝试另一次迁移时会告诉你。

答案 3 :(得分:0)

如果您像我一样提取生产数据库的副本以进行开发,请确保 Migration 文件夹中的所有迁移都列在数据库的 __EFMigrationsHistory 表中。如果您在开发完成后将架构移至生产数据库,则您可能不会将迁移从该表移至生产数据库。如果该表中缺少项目中的任何迁移,EF 将尝试使用任何缺少的迁移更新数据库。就我而言,数据库表中没有列出任何迁移,因此它首先尝试添加初始迁移。在将所有迁移添加到表中后(除了我想要更新数据库的最新迁移),EF 正确更新了数据库。