EF Core 模型快照在添加迁移和更新之间不同步
EF Core Model Snapshot out of sync between add-migration and update
我正在使用 EF Core 和代码迁移。据我了解,快照文件应该是构建未来迁移文件的 "target database"。
情况:
1) 在进行一些更改后,我进行了添加迁移以创建迁移。这更新了模型快照,我猜这是预期的行为。
2)然后我意识到我意识到我输入错误的字段之一。它应该是一个字节 [] 而不是一个字符串
3) 我对 类 进行了更改
4)我再次添加迁移。
现在 DataSnapshot 似乎不同步,因为新的添加迁移不包括这种类型的文件更改。
我似乎无法执行删除迁移,因为实际上没有任何迁移应用到任何数据库。
我知道在 EF6 中,这是一个很好的方法,因为它始终针对实际数据库进行更改,而不是此快照文件。因此,只需删除更改文件并重新制作更改文件就足够了。
这是我第二次在意识到存在问题后不得不对迁移文件进行一些更改(实际上 运行 没有针对任何内容进行更新)并且两次尝试都非常痛苦在不清除我之前的所有迁移并重新开始的情况下解决问题。
我的问题是我现在该如何处理?每次回溯添加迁移时,我是否应该同时删除更改文件和快照文件?
我真的很担心我在这里遗漏了一些东西,因为现在我必须确保不仅更改文件正确,而且当前快照也正确,如果快照不同步,然后我必须手动将其更新为
现在可能已经解决了这个问题,但我只是 运行 解决了这个问题。
不确定这是否是同一个问题,但我是这样理解的。
update-database
是一个数据库操作,将您的数据库更新到当前版本或目标迁移。
remove-migration
是一个 EF 操作,它会更新您的迁移堆栈并更新您的快照。
要降级,我必须更新数据库,然后删除迁移到预期目标。
在这一点上,添加一个新的迁移给了我预期的一组变化,和以前一样给了我 none。
这似乎符合我对 EF 所做的 update-database
和 update-database -target
的预期
我认为在这种情况下你唯一可能做错的是在更新之前删除你的迁移文件,因为迁移文件中指示了向下的步骤,所以如果你将无法完成这一步删除文件。如果你有这些文件,你可以自由地定位迁移来设置你当前的数据库状态。
我认为令人困惑的部分是快照以前用于每次迁移,而现在 "last migration"
有一个快照
我正在使用 EF Core 和代码迁移。据我了解,快照文件应该是构建未来迁移文件的 "target database"。
情况:
1) 在进行一些更改后,我进行了添加迁移以创建迁移。这更新了模型快照,我猜这是预期的行为。
2)然后我意识到我意识到我输入错误的字段之一。它应该是一个字节 [] 而不是一个字符串
3) 我对 类 进行了更改
4)我再次添加迁移。
现在 DataSnapshot 似乎不同步,因为新的添加迁移不包括这种类型的文件更改。
我似乎无法执行删除迁移,因为实际上没有任何迁移应用到任何数据库。
我知道在 EF6 中,这是一个很好的方法,因为它始终针对实际数据库进行更改,而不是此快照文件。因此,只需删除更改文件并重新制作更改文件就足够了。
这是我第二次在意识到存在问题后不得不对迁移文件进行一些更改(实际上 运行 没有针对任何内容进行更新)并且两次尝试都非常痛苦在不清除我之前的所有迁移并重新开始的情况下解决问题。
我的问题是我现在该如何处理?每次回溯添加迁移时,我是否应该同时删除更改文件和快照文件?
我真的很担心我在这里遗漏了一些东西,因为现在我必须确保不仅更改文件正确,而且当前快照也正确,如果快照不同步,然后我必须手动将其更新为
现在可能已经解决了这个问题,但我只是 运行 解决了这个问题。
不确定这是否是同一个问题,但我是这样理解的。
update-database
是一个数据库操作,将您的数据库更新到当前版本或目标迁移。
remove-migration
是一个 EF 操作,它会更新您的迁移堆栈并更新您的快照。
要降级,我必须更新数据库,然后删除迁移到预期目标。
在这一点上,添加一个新的迁移给了我预期的一组变化,和以前一样给了我 none。
这似乎符合我对 EF 所做的 update-database
和 update-database -target
我认为在这种情况下你唯一可能做错的是在更新之前删除你的迁移文件,因为迁移文件中指示了向下的步骤,所以如果你将无法完成这一步删除文件。如果你有这些文件,你可以自由地定位迁移来设置你当前的数据库状态。
我认为令人困惑的部分是快照以前用于每次迁移,而现在 "last migration"
有一个快照