【问题标题】:There is already an object named AspNetRoles in the database. (entity-framework-core)数据库中已经有一个名为 AspNetRoles 的对象。 (实体框架核心)
【发布时间】:2017-01-29 06:58:38
【问题描述】:

我有一个使用实体框架核心的 asp.net core 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 上不起作用

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

【问题讨论】:

  • 解决这个问题的方法是应用命令drop-database。在删除迁移之后,您可以使用添加迁移和更新数据库重新开始。它一直对我有用

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


【解决方案1】:

找到我的问题。

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

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

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

我将这些注释掉了,运行了迁移,它运行良好。希望每次我想运行迁移时都不必将它们注释掉:/

【讨论】:

  • 您能解释一下我如何联系public override void Load()吗?
  • 另外我和一个朋友正在做一个项目并使用 Git Hub 共享数据,但是例如当我对已经存在的表进行一些更改时,(例如添加新的道具,如:public int Count {get; set:} ),我的朋友没有得到新的变化!我想问一下您的文档在这种情况下是否有帮助?
【解决方案2】:

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

这是我为使它工作所做的:

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

我现在从我的数据库中进行了一次干净的迁移。现在我未来的变化将来自这个基线。

从此链接找到解决方案:https://cmatskas.com/ef-core-migrations-with-existing-database-schema-and-data/

【讨论】:

    【解决方案3】:

    我刚刚遇到了同样的问题,并且似乎 Database.EnsureCreated() 不使用迁移,您可以使用 Database.Migrate() 代替,这是我刚刚尝试过的并且似乎有效,但是时间当我尝试另一次迁移时会告诉我。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我喜欢你!不错的见解,谢谢大佬!对我的 ModelSnapshot 还原的更改对我有用
      猜你喜欢
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      相关资源
      最近更新 更多