Метод SqlMetadataStore.GetReplicaMetadata

Возвращает объект метаданных реплики, который используется для доступа к метаданным реплики в хранилище метаданных.

Пространство имен: Microsoft.Synchronization.MetadataStorage
Сборка: Microsoft.Synchronization.MetadataStorage (в microsoft.synchronization.metadatastorage.dll)

Синтаксис

'Декларация
Public Overrides Function GetReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId _
) As ReplicaMetadata
'Применение
Dim instance As SqlMetadataStore
Dim idFormats As SyncIdFormatGroup
Dim replicaId As SyncId
Dim returnValue As ReplicaMetadata

returnValue = instance.GetReplicaMetadata(idFormats, replicaId)
public override ReplicaMetadata GetReplicaMetadata (
    SyncIdFormatGroup idFormats,
    SyncId replicaId
)
public:
virtual ReplicaMetadata^ GetReplicaMetadata (
    SyncIdFormatGroup^ idFormats, 
    SyncId^ replicaId
) override
public ReplicaMetadata GetReplicaMetadata (
    SyncIdFormatGroup idFormats, 
    SyncId replicaId
)
public override function GetReplicaMetadata (
    idFormats : SyncIdFormatGroup, 
    replicaId : SyncId
) : ReplicaMetadata

Параметры

  • idFormats
    Схема форматов идентификаторов для поставщика.
  • replicaId
    Идентификатор реплики, связанной с этими метаданными.

Возвращаемое значение

Объект метаданных реплики, который используется для доступа к метаданным реплики в хранилище метаданных.

Исключения

Тип исключения Условие

ObjectDisposedException

Этот объект был удален или не был правильно инициализирован.

ArgumentNullException

Параметр idFormats или replicaId равен пустая ссылка (Nothing в Visual Basic).

SyncIdFormatMismatchException

Формат параметра replicaId не соответствует формату, указанному в списке idFormats, либо idFormats не соответствует схеме идентификаторов форматов, указанной при инициализации метаданных реплики.

ArgumentOutOfRangeException

Длина идентификатора, заданного параметром idFormats, превышает 8000 байт.

InvalidOperationException

Хранилище метаданных не открыто или не создано.

ReplicaMetadataInUseException

Уже активен экземпляр этого объекта метаданных реплики.

ReplicaMetadataNotFoundException

Метаданные реплики с указанным идентификатором replicaId не найдены.

Замечания

Этот метод используется для доступа к метаданным реплик, которые уже существуют в хранилище метаданных. Чтобы создать новые метаданные реплики в хранилище метаданных, используйте метод InitializeReplicaMetadata.

Этот метод возвращает реализацию абстрактного класса ReplicaMetadata, предоставляемую службой хранилища метаданных. Этот абстрактный класс можно использовать для доступа к метаданным реплики, хранящимся в файле базы данных Sync Framework.

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

Пример

В следующем примере производится получение метаданных реплики в объект SqlMetadataStore, причем метаданные реплики уже существуют. После этого производится перечисление хранилища элементов и поиск метаданных для каждого элемента.

public void NewStore(string StoreName, MetadataStore metaStore, bool metaStoreIsNew)
{
    // Close the current store. This is necessary to release the ReplicaMetadata object held by this object.
    Close(true);

    // Keep the store name for later use.
    _StoreName = StoreName;

    // The absolute path of the item store is used as the replica ID.
    string StoreAbsPath = Path.GetFullPath(StoreName);

    // Get or initialize replica metadata in the metadata store.
    _ContactMetadataStore = metaStore;
    if (!metaStoreIsNew)
    {
        // The metadata store exists, so open it and get the replica metadata for the current replica.
        // The replica ID is the absolute path of the item store.
        _ContactReplicaMetadata = _ContactMetadataStore.GetReplicaMetadata(ContactIdFormatGroup,
            new SyncId(StoreAbsPath));

        // Read the contacts from the item store and the metadata store and save them in two
        // in-memory lists. These lists are modified in memory by the methods in this object 
        // and committed to the disk when SaveChanges is called.
        StreamReader contactReader;
        contactReader = File.OpenText(StoreName);

        Contact contact = ReadNextContact(contactReader);
        while (null != contact)
        {
            ItemMetadata itemMeta = FindMetadata(contact);

            _ContactList.Add(itemMeta.GlobalId, contact);
            _ContactItemMetaList.Add(itemMeta.GlobalId, itemMeta);

            contact = ReadNextContact(contactReader);
        }

        contactReader.Close();
    }
    else
    {
        // The metadata store does not exist, so create a new one.

        // Create custom fields for First Name, Last Name, and Phone Number. These will be used
        // as unique index fields for identifying items between the metadata store and the item store.
        FieldSchema[] CustomFields = 
        {
            new FieldSchema(FirstNameField, typeof(string), 100),
            new FieldSchema(LastNameField, typeof(string), 100),
            new FieldSchema(PhoneNumberField, typeof(string), 20)
        };

        // Specify the custom fields as a unique index.
        string[] IndexFields = { FirstNameField, LastNameField, PhoneNumberField };
        IndexSchema[] Indexes = 
        {
            new IndexSchema(IndexFields, true)
        };

        // Create the metadata for the replica in the metadata store.
        _ContactReplicaMetadata = _ContactMetadataStore.InitializeReplicaMetadata(
            ContactIdFormatGroup, new SyncId(StoreAbsPath), CustomFields, Indexes);

        // Set the provider version
        _ContactReplicaMetadata.ProviderVersion = (uint)ContactsProviderVersion.ContactsProvider_v1;
    }
}

См. также

Справочник

Класс SqlMetadataStore
Элементы SqlMetadataStore
Пространство имен Microsoft.Synchronization.MetadataStorage