跳到主要内容

SchemaManager

Defined in: packages/rxdb/src/schema/SchemaManager.ts:47

SchemaManager 实现。

Properties​

rxdb​

protected readonly rxdb: RxDB;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:54

Methods​

findMappedRelation()​

findMappedRelation(meta, relation): FindMappedRelationResult<EntityRelationMetadata>;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:222

查找当前关系属性的映射关系

Parameters​

ParameterTypeDescription
metaEntityMetadata-
relationEntityRelationMetadata当前关系属性

Returns​

FindMappedRelationResult<EntityRelationMetadata>


getEntityMetadata()​

getEntityMetadata(name, namespace):
| Readonly<EntityMetadataType>
| undefined;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:298

获取实体元数据

Parameters​

ParameterType
namestring
namespacestring

Returns​

| Readonly<EntityMetadataType> | undefined


getEntityMetadataByTableName()​

getEntityMetadataByTableName(tableName, namespace):
| Readonly<EntityMetadataType>
| undefined;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:326

通过 tableName 获取实体元数据

Parameters​

ParameterTypeDescription
tableNamestring数据库表名
namespacestring命名空间

Returns​

| Readonly<EntityMetadataType> | undefined


getEntityType()​

getEntityType<T>(name, namespace): T | undefined;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:306

获取实体元数据

Type Parameters​

Type Parameter
T extends EntityType

Parameters​

ParameterType
namestring
namespacestring

Returns​

T | undefined


getEntityTypeByTableName()​

getEntityTypeByTableName<T>(tableName, namespace): T | undefined;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:316

通过 tableName 获取实体类型

Type Parameters​

Type Parameter
T extends EntityType

Parameters​

ParameterTypeDescription
tableNamestring数据库表名
namespacestring命名空间

Returns​

T | undefined


getFieldRelations()​

getFieldRelations(metadata, field): GetFieldRelationsResult;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:259

通过查询条件的字段找出关系数组

Parameters​

ParameterTypeDescription
metadataEntityMetadata-
fieldstring查询条件的字段

Returns​

GetFieldRelationsResult


init()​

init(): void;

Defined in: packages/rxdb/src/schema/SchemaManager.ts:78

注册全部实体元数据,并把缺失的系统表补进 config.entities。

Returns​

void

Remarks​

补表是逐张判定的,不拿任何一张当「注入过了」的哨兵。 此前这里写的是 if (!entities.includes(RxDBBranch)) entities.push(...SYSTEM_ENTITIES), 而 RxDBBranch / RxDBChange / RxDBMigration / RxDBSync 四张表都从 src/index.ts 公开导出 —— 接入方只要在自己的 entities 里写了其中的 RxDBBranch(要给它加关系、 要在 devtools 里单独注册,都会这么写),整批系统表就一张都不会补进来。

在 epic-006 之前这个后果还藏得住:会写 RxDBBranch 的人通常四张一起写,缺的那部分 恰好是空集。现在装了 @aiao/rxdb-plugin-working-tree 的库有 14 张,其中 10 张不对外 导出,接入方没有任何写法能把它们列全,于是必然缺表 —— 症状是首次 commit() 时 entityManager.instantiate(CommitBranchRef) 抛 need init rxdb,一条读不出主语的错。

逐张判定同时保住了原来那个哨兵真正在解决的问题:entities 是 config 上那个可变 数组本身,init() 在 disconnect → reconnect 时会重跑,无条件 push 会让它无限增长。

清单取自 RxDB.systemEntities(核心四张 + 本实例 use() 过的贡献), 不是模块级的 SYSTEM_ENTITIES。后者是判定用的活视图、只增不减:拿它来注入,进程里 只要有任何一个库装了某个贡献方,没装的库也会被建出那些表、吃它们的迁移。