更新 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

SQL注入判断方法总结(持续更新)

32章习题—最大流的更新字符串匹配

32章习题—最大流的更新字符串匹配

更新 NSManagedObject 不会使用 MagicalRecord 调用 NSFetchedResultsControllerDelegate