我正在使用EF Core和代码迁移。据我了解,快照文件应该是构建未来迁移文件的“目标数据库”。
情况:
1)我进行了添加迁移,以在进行一些更改后创建迁移。这更新了我认为是预期行为的模型快照。
2)然后我意识到自己意识到自己打错了一个领域。它不是字符串,而是字节[]。
3)我对课程进行了更改
4)我再次进行了迁移。
现在,由于新的添加迁移不包括此类型的文件更改,因此DataSnapshot似乎不同步。
我似乎无法执行remove-migration,因为实际上没有任何迁移应用于任何数据库。
我知道在EF6中,这是一种很好的方法,因为它始终将更改的实际数据库而不是快照文件作为目标数据库。因此,仅删除变更文件并重新制作变更文件就足够了。
这是我第二次意识到有问题(没有针对任何内容运行更新)后不得不对迁移文件进行一些更改,这两次都是试图解决问题而不擦拭的难以置信的痛苦淘汰所有以前的迁移并重新开始。
我的问题是我现在该如何处理?每次对添加迁移进行回溯时,是否都应该同时删除更改文件和快照文件?
我真的很担心我在这里丢失了一些东西,因为现在我必须确保更改文件不仅正确,而且当前快照也正确,并且如果快照不同步,那么我必须手动将其更新为
答案 0 :(得分:0)
现在可能已经解决了这个问题,但是我碰到了这个问题。
不确定这是否是完全相同的问题,但这就是我的理解。
update-database
是数据库操作,会将您的数据库更新为当前版本或目标迁移。
remove-migration
是一项EF操作,它会更新您的迁移堆栈并更新您的快照。
要降级,我必须先更新数据库,然后再将迁移移到预期的目标。
这时,添加新迁移给了我预期的一组更改,而以前却没有任何改变。
这似乎达到了我对EF所做的update-database
和update-database -target
的期望
在这种情况下,我认为您唯一会做错的事情是在执行更新之前删除迁移文件,因为向下步骤已在迁移文件中指明,因此如果您删除迁移文件,将无法完成此步骤。文件。如果有这些文件,则可以自由地定向迁移以设置当前数据库状态。
我相信令人困惑的部分是,以前在每次迁移时都使用了快照,因为现在有一个快照用于“最后一次迁移”