【问题标题】:Realm migrated schema even though the schema version was never changed即使架构版本从未更改过,领域也会迁移架构
【发布时间】:2016-12-13 22:02:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: realm realm-migration


    【解决方案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++;
                }
            }
        }
    }
    

    【讨论】:

    • 即使架构版本没有改变,领域是否也会更新架构?
    • 不是为了那个。我们从未将其视为用例。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      相关资源
      最近更新 更多