我有一个使用实体框架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正确地更新了数据库。