我有一个使用实体框架核心的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没有效果
我该如何继续?我已经检查了迁移表,它们总是空的,即使它每次都创建了整个数据库。只是似乎没有在迁移表中记录它
答案 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)。
这就是我要做的:
我现在从数据库中进行了干净的迁移。现在,我的未来更改将从此基准开始。
通过以下链接找到了解决方案:https://cmatskas.com/ef-core-migrations-with-existing-database-schema-and-data/
答案 2 :(得分:1)
我刚刚遇到了同样的问题,看起来像Database.EnsureCreated()不使用迁移,你可以使用Database.Migrate()而不是我刚刚尝试过的,似乎工作,但时间当我尝试另一次迁移时会告诉你。
答案 3 :(得分:0)
如果您像我一样提取生产数据库的副本以进行开发,请确保 Migration 文件夹中的所有迁移都列在数据库的 __EFMigrationsHistory 表中。如果您在开发完成后将架构移至生产数据库,则您可能不会将迁移从该表移至生产数据库。如果该表中缺少项目中的任何迁移,EF 将尝试使用任何缺少的迁移更新数据库。就我而言,数据库表中没有列出任何迁移,因此它首先尝试添加初始迁移。在将所有迁移添加到表中后(除了我想要更新数据库的最新迁移),EF 正确更新了数据库。