我对数据库进行了一些手动更改(愚蠢地)以尝试修复我遇到的问题,但现在它已经让我的模型和上下文不同步。
我尝试删除迁移历史记录表,删除迁移文件夹,然后重新运行
enable-migrations
add-migration Initial
Comment out the up() method
update-database
这在理论上重新创建了当前模型的migrationhistory表,但是当我运行代码时,我仍然得到了
支持' EmtDataContext'自从以来情境发生了变化 数据库已创建。考虑使用Code First Migrations进行更新 数据库
我还能尝试什么?在我重新开始的情况下,我有效地创建了一个初始迁移引用,我可以在此基础上构建未来的更改。我认为问题是数据库架构现在与我的模型不同,但我不知道如何找出不同的东西,我不能删除并重新创建数据库,因为其中有关键数据。
如何让我的数据库架构与我的上下文保持一致?
更新:我已经浏览了所有模型类,并与数据库中的当前表进行了比较。它们都匹配,所以看起来我的架构符合要求。我删除了与迁移有关的任何内容,它运行正常。所以这意味着我的模型匹配数据库。似乎是当我尝试通过启用迁移并运行初始空白创建以在DB中设置初始条目时再次设置迁移时,它会向该表写入无效内容。所以我可以在没有设置迁移的情况下运行它,但似乎无法再次重新设置迁移
答案 0 :(得分:1)
删除旧的迁移代码和__MigrationHistory后:
1) enable-migrations
2) add-migration Initial -IgnoreChanges --(same as commenting out Up() code
3) update-database
净效果应与您所做的相同,因此如果您仍然遇到模型不匹配,请尝试添加其他迁移并检查EF尝试更新的代码。
如果没有任何东西弹出,它可能是你的初始化器。使用Database.SetInitializer<MyDbContext>(null);
会让你超越错误,但有点像将它扫到地毯下。
要查看或尝试的其他事项:
答案 1 :(得分:0)
最简单的方法是删除数据库和所有迁移脚本,然后运行add-migration
和update-database
。这将创建一个全新的架构。
如果现有数据库中有您需要的数据,那么您有两个选择。一种是创建seed
函数。另一种方法是备份现有数据库,将其还原到具有不同名称的数据库,然后编写脚本或类似数据,以逐个表的形式恢复数据。