访问副本元数据

元数据存储服务存储两组元数据:一组表示整个副本,一组表示要同步的各个项。使用 ReplicaMetadata(对于托管代码)或 IReplicaMetadata(对于非托管代码)可以对这两组元数据进行操作。

备注

  仅仅设置副本元数据或项元数据对象的属性不能将属性变更保存到元数据存储区中。需要使用 SaveReplicaMetadataSaveItemMetadata(对于托管代码)或者 IReplicaMetadata::SaveReplicaMetadataIReplicaMetadata::SaveItemMetadata(对于非托管代码)保存属性变更。

副本元数据

存储的副本元数据包括:副本 ID、副本的滴答计数、副本的当前知识以及副本的遗忘知识。元数据存储区还提供一个自定义元数据字段,该字段可用于存储与副本关联的所有特定于提供程序的元数据。通过使用 CustomReplicaMetadata 属性(对于托管代码)或 IReplicaMetadata::SetCustomFieldMetadata 方法(对于非托管代码),可以设置此字段。

项元数据

项元数据中包含该项的全局 ID、当前版本和创建版本、一个指示是否已从项存储区中删除该项的值,以及初始化副本元数据时所指定的任何自定义字段。副本元数据对象提供一些方法,可使用这些方法创建新的项元数据、删除项元数据,或者根据项的全局 ID 或自定义字段值查找项元数据。

托管代码:项元数据通过 ItemMetadata 对象表示。若要使用索引字段值搜索某个项,请将字段名称和值传递给 FindItemMetadataByIndexedField

非托管代码:项元数据通过 IItemMetadata 对象表示。若要使用索引字段值搜索某个项,请使用 IReplicaMetadata::CreateEmptyFieldValue 创建一个空的 IFieldValue 对象。针对 IFieldValue 对象设置要搜索的值,然后调用 IReplicaMetadata::FindItemMetadataByIndexedFields

Security note安全性注意

为了保护用户数据,将项标记为“已删除”时,应从该项的元数据中删除所有用户数据(如自定义索引字段)。将项标记为“已删除”时,元数据存储服务自动删除该项的所有变更单位信息。

缓存

副本元数据和项元数据及对象使用该副本或项的元数据的内存中缓存。初始化元数据对象时将从磁盘填充缓存,这之后永不再刷新缓存。这意味着在特定条件下,内存中的表示不同于元数据存储区文件中的表示,例如:

  • 已经对元数据对象设置更新,并且使用某一种保存方法进行了保存,但是尚未写入磁盘(如在未提交显式事务时)。

  • 为同一副本或项创建了多个元数据对象,而且一个实例执行并提交了更新。在这种情况下,未执行变更的对象不是当前对象,获取其元数据的调用将返回更新之前的值。

请参阅

参考

IReplicaMetadata 接口
IItemMetadata 接口
IFieldValue 接口
ReplicaMetadata
ItemMetadata

其他资源

Sync Framework Metadata Storage Service