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)
}
这种方法有点老套,但为什么不呢!?我的意思是,如果您不关心丢失现有数据...
我可以建议两个可能的改进:
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)
在我的情况下,可以在模型更改的情况下毫无顾虑地清理保存的数据,有更好的方法吗?
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)
}
这种方法有点老套,但为什么不呢!?我的意思是,如果您不关心丢失现有数据...
我可以建议两个可能的改进:
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)