1

更新我的领域架构时,我重新配置RealmMigration以添加新的类/字段,但是我忘记更新架构版本。当我更新应用程序时,我没有遇到任何问题,但后来意识到我忘记更新架构版本,这令人困惑,因为我现在意识到领域更新了我的架构,而我没有指定版本已更改。

所以当我更新它时,我得到了类已经存在的异常,这更加令人困惑,因为现在我也不知道要设置我的架构版本——我更改了架构,但是RealmMigration对象已经进行了更改,所以不知道是不是应该把它留在旧版本号,导致没有类已经存在异常,或者将它更改为正确的版本号,导致异常。

RealmMigration如果遇到领域迁移异常,领域是否可以使用给定对象执行迁移;即使架构版本从未更新过?

4

2 回答 2

1

让我假设您的迁移代码是:

RealmMigration migration = new RealmMigration() {
    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        RealmSchema schema = realm.getSchema();
        if (oldVersion == 0) {
            schema.create("Person")
               .addField("name", String.class)
               .addField("age", int.class);
            // forgot: oldVersion++;
        }
    }
}

您不能使用版本来确定是否应该添加Person类或升级版本。但是您可以使用您知道Person的是否存在,您需要升级版本。

RealmMigration migration = new RealmMigration() {
    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        RealmSchema schema = realm.getSchema();
        if (oldVersion == 0) {
            if (schema.contains("Person)) {
                oldVersion++;
            } else {
                schema.create("Person")
                   .addField("name", String.class)
                   .addField("age", int.class);
                oldVersion++;
            }
        }
    }
}
于 2016-12-14T10:54:00.007 回答
0

如果忘记更改数据库版本,领域迁移将不会启动并且不会损坏数据库。只需编写实际版本(即以前的 - 1,实际 - 2),正确的迁移脚本将自动启动。

于 2016-12-29T09:27:55.277 回答