【发布时间】:2022-01-12 14:36:38
【问题描述】:
上下文: 我有一个适用于 iOS 和 Android 的应用程序;其中 iOS 版本是原生的,Android 版本是 React-Native 的。我从两个单独的对象方案开始,但现在我想修改 Android(React-Native)方案,以便所有实体都等于我的 iOS 版本。我想这样做是为了在测试时可以轻松地交换数据库文件,并且因为我想实现跨平台的云同步。
发生了什么
假设我有这两个实体:
static schema: Realm.ObjectSchema = {
name: 'DBGame',
primaryKey: 'id',
properties: {
id: 'string',
players: 'DBPlayer[]',
},
};
static schema: Realm.ObjectSchema = {
name: 'DBPlayer',
primaryKey: 'id',
properties: {
id: 'string',
games: {type: 'linkingObjects', objectType: 'DBGame', property: 'players'},
},
};
如果我想将这些实体从 DBGame 和 DBPlayer 重命名为 RSGame 和 RSPlayer,我会:
- 增加我的架构版本号
- 打开领域时添加迁移功能
.. 然后呢?当我重命名架构名称时,Realm 将根本无法打开,因为它找不到具有新架构名称的表(这是有道理的,因为它们尚未迁移)。
问题 现在看来,在 JS 中重命名 Realm 表的唯一方法是在旧模式之外创建新模式并保持它们都处于活动状态,直到所有用户都迁移。然而,这看起来很丑陋和hacky。
在 Realm JS / Realm React-Native 中重命名表/实体的正确方法是什么?
【问题讨论】:
-
我在大型项目中使用了领域,我遇到了这个问题,这似乎是唯一的出路,因为我做了和你一样的事情,我也必须关注这个问题,因为要去通过从旧到新的领域文档,我似乎找不到任何出路
标签: javascript react-native realm database-migration realm-migration