EF Core 模型快照在添加迁移和更新之间不同步

Jak*_*ova 5 ef-code-first ef-core-2.2

我正在使用 EF Core 和代码迁移。据我了解,快照文件应该是构建未来迁移文件的“目标数据库”。

情况:

1)我做了一些添加迁移来创建一些更改后的迁移。这更新了模型快照,我认为这是预期的行为。
2)然后我意识到我错误地输入了一个字段。它应该是一个 byte[] 而不是字符串 3) 我对类进行了更改 4) 我再次进行了添加迁移。

现在,DataSnapshot 似乎不同步,因为新的添加迁移不包括此类型的文件更改。

我似乎无法执行删除迁移,因为实际上没有任何迁移应用于任何数据库。

我知道在 EF6 中,这是一种很好的方法,因为它始终针对实际的数据库进行更改,而不是此快照文件。因此,只需删除更改文件并重新制作更改文件就足够了。

这是我第二次在意识到存在问题后不得不对迁移文件进行一些更改(没有实际针对任何内容运行更新),这两次都是令人难以置信的痛苦,尝试解决问题而不消除我的所有之前的迁移并重新开始。

我的问题是我现在该如何处理?每次回溯添加迁移时是否应该删除更改文件和快照文件?

我真的很担心我在这里遗漏了一些东西,因为现在我必须确保不仅更改文件正确,而且当前快照也正确,如果该快照不同步,那么我必须去手动更新它

Cap*_*nny 5

现在可能已经解决了这个问题,但我刚刚遇到了这个问题。

不确定这是否是完全相同的问题,但这就是我的理解。

update-database是一个数据库操作,会将您的数据库更新到当前版本或目标迁移。

remove-migration是一个 EF 操作,会更新您的迁移堆栈并更新您的快照。

要降版本,我必须更新数据库,然后删除迁移到预期目标。

此时添加新的迁移给了我预期的一组更改,而之前它没有给我带来任何更改。

update-database这似乎达到了我对 EF 的预期update-database -target

我认为在这种情况下您实际上可能做错的唯一一件事是在进行更新之前删除迁移文件,因为迁移文件中指示了下行步骤,因此如果您删除文件,它将无法完成此步骤。如果您有这些文件,您可以自由地进行目标迁移以设置当前的数据库状态。

我认为令人困惑的部分是快照之前在每次迁移中都使用过,而现在只有一个快照用于“最后一次迁移”