数据库中已经存在一个名为AspNetRoles的对象。(Entity Framework Core)

3
我有一个使用Entity Framework Core的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命令。之后再使用remove-migration,然后就可以重新开始add-migration和update-database了。这对我来说一直都有效。 - Marlon Diaz La Hoz
4个回答

9

找到了我的问题。

我按照此教程加载了来自 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() 吗? - Hossein
我和一个朋友正在合作开发一个项目,并使用 Git Hub 共享数据。但是,例如当我对已经存在的表格进行更改时(例如添加新属性,如:public int Count {get; set:}),我的朋友却没有得到新的更改!我想问一下你们的文档在这种情况下是否有帮助? - Hossein

4

我更改了我的数据库(从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/


1

我刚遇到了同样的问题,看起来Database.EnsureCreated()不使用迁移,你可以使用Database.Migrate()代替,这就是我刚尝试过的,似乎可以工作,但是当我尝试另一个迁移时才能确定。


1
如果你和我一样,从生产数据库中获取了一个副本用于开发,请确保 Migration 文件夹中的所有迁移都列在数据库的 __EFMigrationsHistory 表中。如果你在开发完成后将模式移动到生产数据库,则可能不会将该表中的迁移移动到生产数据库中。如果项目中有任何迁移未在该表中列出,则 EF 将尝试使用任何缺失的迁移来更新数据库。在我的情况下,数据库表中没有列出任何迁移,因此它开始尝试添加初始迁移。在将所有迁移添加到表中(除了我想要更新数据库的最新迁移)之后,EF 正确地更新了数据库。

我和你一样!很棒的见解,谢谢伙计!撤销我的ModelSnapshot更改对我有用。 - BHANG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接