База данных комнат при создании обратного вызова не вызывается после разрушительной миграции - PullRequest
3 голосов
/ 22 мая 2019

У меня есть начальное состояние, которое мне нужно создать в моей базе данных Room.Я делаю это в обратном вызове onCreate:

val database = Room.databaseBuilder(context, MyDatabase::class.java, "mydatabase").addCallback(object : RoomDatabase.Callback() {
    override fun onCreate(db: SupportSQLiteDatabase) {
      super.onCreate(db)
      database.myDao().initialize()
    }
  })
  .build()

Это прекрасно работает, пока я не добавлю деструктивную миграцию.Все данные приложений поступают с сервера.В настоящее время нет причин писать миграцию, поскольку приложение синхронизируется при входе в систему.

val database = Room.databaseBuilder(context, MyDatabase::class.java, "mydatabase").addCallback(object : RoomDatabase.Callback() {
    override fun onCreate(db: SupportSQLiteDatabase) {
      ...
    })
    .fallbackToDestructiveMigration()
    .build()

Проблема заключается в том, что инициализация, выполненная в myDao.initialize (), была стерта, и кажется, что хотямиграция была деструктивной, onCreate больше не вызывался.

Есть ли хороший способ справиться с этим без написания пользовательских миграций для каждой версии базы данных?

IE я могу написать свою собственную деструктивную миграцию, которая выполняется длякаждая версия БД, а также вызывает мою функцию initialize ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...