For the complete documentation index, see llms.txt. This page is also available as Markdown.

数据模式

从用户归档、浏览记录和主题审核理解 schema 对字段与导航的控制。

数据模式是传给数据访问或数据服务的 schema 文本,描述本次操作包含哪些成员。关系定义来自映射,模式只选择这次使用的形状;它不是另一份数据库结构。

用户归档需要站点信息

来源:src/Features/Archiving/UserDataTemplateModelProvider.cs(节选;上下文见源文件)。

UserDataTemplateModelProvider.cs
var schema = $"*, {nameof(UserProfile.Site)}" + "{*}";

这条真实模式选择用户的简单字段,并展开 Site 的简单字段。单独的星号不会自动展开所有导航,也不会自动补齐模型计算属性的依赖字段。归档提供者随后把结果包装为 Users,交给 user-list.xlsx,见表格与模板。

浏览记录展开主题

来源:src/Services/UserService.cs(节选;上下文见源文件)。

UserService.cs
public IEnumerable<History> GetHistories(uint userId, Paging paging = null)
{
	if(userId == 0)
		userId = this.Principal.Identity.GetIdentifier<uint>();

	return this.DataAccess.Select<History>(Condition.Equal(nameof(History.UserId), userId), $"*, {nameof(History.Thread)}" + "{*}", paging);
}

History.Thread 关系由映射连接。只在列表确实需要主题详情时才展开;集合或深层关系可能增加查询次数与结果体积。

写入模式包含关联成员

来源:src/Services/ThreadService.cs(节选;上下文见源文件)。

ThreadService 插入主题时,先确认正文存在,再把 Post 加入写入模式。审核动作则限定 Post 的 Approved 字段,防止一个状态动作顺便更新无关正文。

语法参考与框架用例

语法
含义

逗号分隔成员

选择多个字段或导航

星号

当前层可匹配的简单成员

感叹号加成员

从当前选择中排除成员

点路径或花括号

沿映射关系选择成员

冒号加数量

集合导航限量,不是页码

括号内排序成员

指定导航结果排序,负号或波浪号表示倒序

Discussions 没有使用导航限量的业务片段,相关边界采用框架 SchemaTest 和 SchemaParserTest 作为参考。根结果集分页使用 Paging,见查询。

权限与计算字段

模式控制读取形状,不是授权规则。让调用者排除 Approved、CreatorId 等审核判定字段时,不能默认正文可见;Discussions 的结果过滤器对此采用屏蔽处理。计算成员也不会自动推导其所需原始字段,应由服务限定模式。

最后更新于