更新 ContextModelSnapshot EF Core
Posted
技术标签:
【中文标题】更新 ContextModelSnapshot EF Core【英文标题】:Update ContextModelSnapshot EF Core 【发布时间】:2018-05-04 18:33:49 【问题描述】:我是 EF Core 的新手,所以如果有一个琐碎的答案,请原谅我。
以这种情况为例....
正在使用最新版本的 ASP.NET Core 开发新的 Web 应用程序,并采用代码优先的方法。在某些时候,由于删除或源代码控制,ContextModelSnapshot 与数据库不同步。我们无法删除数据库并重新创建它。
问题:如何将快照与数据库“重新同步”?
【问题讨论】:
【参考方案1】:你可以执行命令
Add-migration temporary
创建一个新的空迁移。然后,运行
Remove-Migration temporary
(或他们的 dotnet-cli 对应)
在最新版本的 EF Core (3+) 中,只需使用:
Remove-Migration
(将恢复上次迁移)
即使迁移已被删除,它也会从头开始创建模型快照。这种方法非常适用于 Ef core 2.2.0-rtm-35687
【讨论】:
从数据库重新创建快照的非常出人意料的方法,但有效 这不起作用,因为Add-Migration
不能在没有迁移名称的情况下运行。
给它一个名字Add-Migration MyName
这个名字并不重要,因为Remove-Migration会移除这个文件。
Remove-Migration 不需要争论,至少在最近的 EF Core 版本中是这样。
我对“它会还原模型快照”感到很困惑。 @m-artem 的意思是“它将从头开始重新创建它”吗?由于它不同步,我看不出它是如何“还原”的,所以我认为它是“重新创建的”。【参考方案2】:
很简单,只需删除 ContextModelSnapshot 然后添加新的迁移
【讨论】:
这是不正确的。如果您删除 ContextModelSnapshot 并添加新迁移,则新迁移将包含先前迁移的所有指令(使新迁移与前迁移冗余 - 甚至冲突)以上是关于更新 ContextModelSnapshot EF Core的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewDiffableDataSource 实时更新
核心数据:更新托管对象不会调用 NSFetchedResultsControllerDelegate
更新 NSManagedObject 不会使用 MagicalRecord 调用 NSFetchedResultsControllerDelegate