ObjectBox,如何在冲突时删除所有迁移?

ObjectBox, how to drop-everything migration on conflicts?

在我的情况下,可以在模型更改的情况下毫无顾虑地清理保存的数据,有更好的方法吗?

private val dataSource = try {
    MyObjectBox.builder().androidContext(context).build().boxFor(XXXX::class)
} catch (e: Exception) {
    BoxStore.deleteAllFiles(context, BoxStoreBuilder.DEFAULT_NAME)
    MyObjectBox.builder().androidContext(context).build().boxFor(XXXX::class)
}

我想知道是否有这样的事情:https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Builder#fallbackToDestructiveMigration()

这种方法有点老套,但为什么不呢!?我的意思是,如果您不关心丢失现有数据...

我可以建议两个可能的改进:

  • boxFor() 应该在 try 之外,因为这里的任何错误都与模型更改无关。
  • 而不是 Exception,您可以更具体。例如。 DbSchemaException 用于模型相关异常,或作为“in-between”解决方案,DbException 用于捕获任何 DB-related 异常(包括 DbSchemaException)。

因此,为了调整您的代码,它可能看起来像这样:

private val store = try {
    MyObjectBox.builder().androidContext(context).build()
} catch (e: DbSchemaException) {
    BoxStore.deleteAllFiles(context, BoxStoreBuilder.DEFAULT_NAME)
    MyObjectBox.builder().androidContext(context).build()
}
private val box = store.boxFor(XXXX::class)