在数据库中已经有一个名为AspNetRoles的对象.(entity-framework-core)



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

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

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

我试过了add-migration MyInitialMigration

同样的错误

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

仍然是相同的错误

我尝试更改appsettings配置字符串以指向一个新的,不存在的数据库。

还是同样的错误!

以前在MVC5/EF6上,我遇到了这个错误,并使用与这个答案相同的方法解决了它:在数据库

中已经有一个对象命名

-Add-Migration Initial -IgnoreChanges

但是-IgnoreChanges在EFCore中是不支持的

或者以前在EF6上,我通过添加迁移来解决它,然后删除Up/Down中的所有内容并运行空迁移。这在EFCore

上不起作用

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

找到我的问题了

我已经按照这个教程从EntityFramework加载应用程序:https://docs.asp.net/en/latest/fundamentals/configuration.html example-entity-framework-settings

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

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

我把这些注释掉了,运行迁移,它工作得很好。希望我不需要每次运行迁移时都把它们注释掉:/

这个错误发生后,我改变了我的数据库(我停止使用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/

我刚刚遇到了同样的问题,似乎数据库. ensurecreated()不使用迁移,您可以使用数据库. migrate()代替,这是我刚刚尝试过的,似乎可以工作,但时间会告诉我什么时候尝试另一个迁移。

如果你像我一样,在开发中提取生产数据库的副本,请确保Migration文件夹中的所有迁移都列在数据库的__efmigrationhistory表中。如果在开发完成后将模式移动到生产数据库,则可能不会将迁移从该表移动到生产数据库。如果该表中缺少项目中的任何迁移,EF将尝试使用任何丢失的迁移更新数据库。在我的例子中,数据库表中没有列出任何迁移,因此首先尝试添加初始迁移。在将所有迁移添加到表中(除了我想更新数据库的最新迁移)之后,EF正确地更新了数据库。

相关内容

  • 没有找到相关文章

最新更新