0

我正在尝试 Sense/Net 社区版功能。

我成功定义并安装了名为“假期请求”的内容类型。

我想知道表中“映射”字段的目的是什么:SchemaPropertyTypes

非常感谢,

4

1 回答 1

1

我真的非常希望您只是出于好奇才问这个问题,而不是因为您想在数据库中手动更改某些内容-因为不建议这样做:)。请始终通过API访问内容存储库,不要直接查询或修改数据库。

属性类型和值

简单的属性值(如int短文本值)存储在FlatProperties表中。这是一个固定的表,包含预定义数量的专用于不同类型的列(例如,x 段字符串列,y 段 int 列 - 参见表中的列名)。

正如您所发现的,属性定义存储在SchemaPropertyTypes表中。

SchemaPropertyTypes 表中从零开始的映射字段定义了FlatProperties 表中特定属性的列索引。例如,映射为 6 的字符串属性的值将存储在 FlatProperties 表的 'nvarchar_7' 列中(注意索引移动了 1,因为列名索引是从 1 开始的)。

如果您查看PropertyInfoView视图(不是表),它可能有助于澄清这一点:视图的最后一列是一个计算列,它显示您可以在平面属性表中查找的列名。

(那里还有其他有用的 SQL 视图以更易读的方式显示数据)

属性“溢出”

在 FlatProperties 表中注册的同一类型(例如 int)的属性可能比一行中的更多。解决方案: Sense/Net 将这些节点存储在多行中——这就是那里有一个 Page 列的原因。虽然 MS SQL Server 支持大量列有一段时间了,但出于兼容性原因一直保留这种设计。

这就是为什么您会在 PropertyInfoView 中看到像 249 列名称为 nvarchar_10 的映射值:该值存储在第 3 页上,这意味着内容占用 FlatProperties 表中的 3 条记录。

“其他”属性类型

您可能已经注意到,在引用或长文本属性的情况下,没有映射。这是因为我们没有将它们存储在 FlatProperties 表中,它们有自己的表,例如ReferencePropertiesTextPropertiesNText

于 2017-02-01T22:19:04.467 回答