В моем текущем проекте у нас есть пять разных экземпляров царства для разных морских свиней. Основной версии схемы теперь 5, и мы хотим избавиться от нее и запустить следующую (схему версии 6) полностью чистой, потому что мы запустили версию 2.0.0 приложения и произошли изменения в мэрии БД.
Вопрос в том, есть ли способ проверить старую версию схемы экземпляра области перед созданием его новой конфигурации?
Мы уже пытались определить конкретную версию схемы для удаления области с помощью realmDeleteIfMigrationNeeded()
и предоставить класс миграции для следующих версий. Проблема с этим подходом заключается в том, что у пользователя есть версия приложения с версией схемы ниже той, которая указана, и обновление до версии приложения с большей, поэтому у нас возникает исключение, необходимое для миграции.
Я также нашел здесь realm, проверьте версию схемы , здесь https://github.com/realm/realm-java/issues/2645 и здесь https://github.com/realm/realm-java/issues/6049 возможное решение с помощью 'val realm = DynamicRealm.getInstance (realmConfiguration)' и затем getSchemaVersion (), но мы действительно не знаем, как это может работать, поскольку вам нужно предоставить «RealmConfiguration», когда вам действительно нужно установить версию схемы.
Я попытаюсь прояснить свой вопрос, у нас есть следующий способ получения экземпляра области
private val realmConfiguration = buildRealmConfiguration(realmInstance)
private fun buildRealmConfiguration(realmInstance: RealmInstance):
RealmConfiguration {
return realmInstance.run {
val realmBuilder = RealmConfiguration.Builder()
.name(getName())
.schemaVersion(schemaVersion.toLong())
if (this == RealmInstance.IN_MEMORY) {
realmBuilder.inMemory()
} else {
getMigration(realmBuilder, this)
}
realmBuilder.build()
}
fun getInstance(): Realm {
return Realm.getInstance(realmConfiguration)
}
enum class RealmInstance(val instance: String, val schemaVersion: Int) {
MAIN_DB(instance = "main_db", schemaVersion = 5),
DB2(instance = "db2", schemaVersion = 1),
...
fun getName() = instance
fun getMigration(
realmBuilder: RealmConfiguration.Builder,
realmInstance: RealmInstance
) {
when (realmInstance) {
MAIN_DB -> {
/*
Variable used to delete main_db Realm during migration from app version 1.x.x to version 2.0.0 due to a mayor schema change
*/
val migrateToAppVersion2 = realmInstance.schemaVersion <= 4
realmBuilder.apply {
modules(mainDbModule())
if (deleteRealm) {
deleteRealmIfMigrationNeeded()
} else {
migration(realmMigration!!)
}
}
}
...
Идеальной ситуацией будет проверка фактической версии схемы БД перед вызовом getMigration (), что позволит нам всегда удалять область, если старая версия схемы принадлежит v1.x.x приложения.