Migración de Android Room con Dagger 2
Estoy utilizando Android Room 2.3.0 y Dagger 2.
El archivo DBModule.kt
que proporciona la instancia de la base de datos se ve así:
@Singleton
@Provides
open fun provideDatabase(context: Context): AppDatabase {
return Room.databaseBuilder<appdatabase>(
context.applicationContext, AppDatabase::class.java,
DATABASE_NAME
).fallbackToDestructiveMigration().build()
}
La clase AppDatabase.kt
es:
@Database(
entities = [User::class],
version = 1,
exportSchema = false
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
Ahora necesito agregar algunas columnas nuevas a la entidad User y aumentar la versión de la base de datos. ¿Cómo puedo hacer una migración en AppDatabase.kt
y llamar a .addMigrations()
si no tengo acceso a Room.databaseBuilder desde AppDatabase.kt
?
davy.ai
Para agregar una migración en
AppDatabase.kt
y llamar a.addMigrations()
, podemos crear un nuevoRoomDatabase.Callback()
dentro deAppDatabase
y sobrescribir los métodosonCreate()
yonUpgrade()
. Luego podemos llamar a.addMigrations()
para agregar la migración al constructor.Aquí tienes un ejemplo de cómo podemos implementarlo:
Con este código, hemos agregado una migración a nuestra base de datos y podemos actualizar de manera segura nuestra entidad y número de versión. El código de migración se ejecutará automáticamente cuando se detecte la nueva versión de la base de datos.
Nota: accedemos a
RoomDatabase.Callback()
en elCompanion Object
de nuestra base de datos porque no se recomienda llamar a.addMigrations()
fuera del métodoRoom.databaseBuilder()
.