Flutter中Isar数据库如何为同一类型创建多个集合?
Isar 同类型对象创建多个集合的实现方案
Isar 不支持同一个模型类直接绑定多个集合,每个@Collection注解的类仅能对应唯一的同名集合,无法重复添加注解是框架的正常限制,可通过以下两种方案实现需求:
方案1:子类继承实现独立集合(推荐,完全物理隔离)
把原模型类的@Collection注解移除,创建两个继承自该类的子类,分别添加@Collection注解即可,无需重复定义字段:
import 'package:isar/isar.dart'; // 原基础模型类,不添加@Collection注解 class ProgramModel { @Id() int? id; String? title; } // 第一个集合对应的实体类 @Collection() class FirstProgramCollection extends ProgramModel {} // 第二个集合对应的实体类 @Collection() class SecondProgramCollection extends ProgramModel {}
后续操作两个集合时,分别调用isar.firstProgramCollections和isar.secondProgramCollections即可,两个集合完全独立,互不影响,支持单独设置索引、单独清理数据等操作。
方案2:新增区分字段实现逻辑隔离(轻量场景适用)
如果不需要物理隔离两个数据集,可在原模型类中新增一个区分标识字段,查询、写入时通过该字段过滤即可:
import 'package:isar/isar.dart'; @Collection() class ProgramModel { @Id() int? id; String? title; // 区分逻辑集合:1对应第一个集合,2对应第二个集合,可根据需求扩展 int collectionType = 1; } // 查询第一个逻辑集合的数据 final firstCollectionData = isar.programModels.filter().collectionTypeEqualTo(1).findAll(); // 查询第二个逻辑集合的数据 final secondCollectionData = isar.programModels.filter().collectionTypeEqualTo(2).findAll();
该方案无需新增类,适合两个集合数据结构完全一致、仅逻辑上拆分的场景,数据量较小的情况下性能无明显差异。
内容的提问来源于stack exchange,提问作者Szynkie
相关产品推荐
相关产品推荐

