Поделиться через


Доступ к метаданным реплики

Служба хранилища метаданных хранит две группы метаданных: одна из них представляет всю реплику, а вторая — отдельные элементы, подлежащие синхронизации. Для управления обеими этими группами используется объект ReplicaMetadata (для управляемого кода) или IReplicaMetadata (для неуправляемого кода).

Примечание

  Изменение свойства нельзя сохранить в хранилище метаданных путем простого задания свойства в объекте метаданных реплики или метаданных элемента. Для сохранения изменений свойств используются методы SaveReplicaMetadata или SaveItemMetadata (для управляемого кода) либо IReplicaMetadata::SaveReplicaMetadata или IReplicaMetadata::SaveItemMetadata (для неуправляемого кода).

Метаданные реплики

Хранимые метаданные реплики включают идентификатор реплики, счетчик тактов для реплики, текущий набор знаний реплики и утраченный набор знаний реплики. В хранилище метаданных предоставляется также пользовательское поле метаданных, которое может служить для хранения любых метаданных, зависящих от поставщика, которые связаны с репликой. Значение этого поля можно задать с использованием свойства CustomReplicaMetadata (для управляемого кода) или метода IReplicaMetadata::SetCustomFieldMetadata (для неуправляемого кода).

Метаданные элемента

Метаданные элемента содержат глобальный идентификатор элемента, текущую версию и версию создания, значение, которое указывает, был ли элемент удален из хранилища элементов, а также все пользовательские поля, заданные при инициализации метаданных реплики. Объект метаданных реплики предоставляет методы, которые могут использоваться для создания новых метаданных элемента, удаления метаданных элемента или поиска метаданных элемента на основе глобального идентификатора элемента или значения пользовательского поля.

Управляемый код Метаданные элемента представлены объектом ItemMetadata. Чтобы выполнить поиск элемента с использованием некоторого значения индексного поля, передайте имя поля и значение в FindItemMetadataByIndexedField.

Неуправляемый код Метаданные элемента представлены объектом IItemMetadata. Чтобы выполнить поиск элемента с использованием некоторого значения индексного поля, создайте пустой объект IFieldValue с помощью IReplicaMetadata::CreateEmptyFieldValue. Задайте искомое значение в объекте IFieldValue и вызовите IReplicaMetadata::FindItemMetadataByIndexedFields.

Примечание по безопасностиПримечание по безопасности

Для защиты данных пользователя, если элемент помечен как удаленный, все данные пользователя, такие как поля пользовательского индекса, должны быть удалены из метаданных данного элемента. Если элемент помечен как удаленный, служба хранилища метаданных автоматически удаляет все сведения о базовых единицах для этого элемента.

Кэширование

Для работы с метаданными реплики, метаданными элемента и объектами используется кэш метаданных в оперативной памяти, распределенный для реплики или элемента. Этот кэш заполняется с диска при инициализации объекта метаданных и после этого ни разу не обновляется. Это означает, что представление в оперативной памяти будет отличаться от представления в файле хранилища метаданных при определенных условиях, таких как следующие.

  • Обновления были заданы для объекта метаданных и сохранены с использованием одного из методов сохранения, но еще не были записаны на диск, что имеет место, например, если еще не была зафиксирована явная транзакция.

  • Создано более одного объекта метаданных для одной и той же реплики или элемента, а внесение и фиксация обновлений осуществляются с помощью одного экземпляра. В этом случае объект, который не внес изменения, не будет текущим, а вызовы для получения его метаданных приведут к возврату значений, существовавших до обновления.

См. также

Справочник

ReplicaMetadata

ItemMetadata

Другие ресурсы

Служба хранилища метаданных платформы Sync Framework

Интерфейс IReplicaMetadata

Интерфейс IItemMetadata

Интерфейс IFieldValue