我有一个应用程序,它的会议室数据库版本1已启动并正在运行。在版本2中,我想销毁所有表并重新创建模式,而不是编写Migration(1, 2)
逻辑。因此,我阅读了docs并找到了方法.fallbackToDestructiveMigrationFrom()
。因此,如果我在此处传递参数2,那么我认为它应该重新创建所有表
版本2。我无法理解的是在文档中他们提到了一个音符
注意:在提供给addMigrations(Migration)的Migrations中,传递给此方法的版本也可能不存在,无论是开始版本还是结束版本。如果在迁移中找到传递给此方法的版本作为开始或结束版本,则将引发异常
这是否意味着如果我将数据库版本升级到3并进行了一些模式更改,如果我写Migration(2, 3)
它将引发异常?
答案 0 :(得分:1)
如果您通过.fallbackToDestructiveMigrationFrom(3)
并同时提供Migration(2, 3)
,这是正确的,Room会抛出异常。
那听起来确实像您真正想做的是使用fallbackToDestructiveMigration()
。
在这种情况下,它将完全按照您的要求进行操作:
Migration(X, Y)
,它将破坏架构和数据
并为版本Y创建一个新版本。这样,您就不会出现异常。 我想这就是你要的...
答案 1 :(得分:0)
我在问题中说的每件事都是对的,除了我必须将1作为参数传递给.fallbackToDestructiveMigrationFrom()
。
.fallbackToDestructiveMigrationFrom(1)
将意味着如果旧数据库版本为1则销毁数据库。如果当前版本为1,则它不像销毁数据库。这就是我的困惑。
为聊天中的澄清提供信用至Itamar Kerbel。