Метод SqlMetadataStore.InitializeReplicaMetadata

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

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

Синтаксис

'Декларация
Public Overrides Function InitializeReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId, _
    customItemFieldSchemas As IEnumerable(Of FieldSchema), _
    customIndexedFieldSchemas As IEnumerable(Of IndexSchema) _
) As ReplicaMetadata
'Применение
Dim instance As SqlMetadataStore
Dim idFormats As SyncIdFormatGroup
Dim replicaId As SyncId
Dim customItemFieldSchemas As IEnumerable(Of FieldSchema)
Dim customIndexedFieldSchemas As IEnumerable(Of IndexSchema)
Dim returnValue As ReplicaMetadata

returnValue = instance.InitializeReplicaMetadata(idFormats, replicaId, customItemFieldSchemas, customIndexedFieldSchemas)
public override ReplicaMetadata InitializeReplicaMetadata (
    SyncIdFormatGroup idFormats,
    SyncId replicaId,
    IEnumerable<FieldSchema> customItemFieldSchemas,
    IEnumerable<IndexSchema> customIndexedFieldSchemas
)
public:
virtual ReplicaMetadata^ InitializeReplicaMetadata (
    SyncIdFormatGroup^ idFormats, 
    SyncId^ replicaId, 
    IEnumerable<FieldSchema^>^ customItemFieldSchemas, 
    IEnumerable<IndexSchema^>^ customIndexedFieldSchemas
) override
public ReplicaMetadata InitializeReplicaMetadata (
    SyncIdFormatGroup idFormats, 
    SyncId replicaId, 
    IEnumerable<FieldSchema> customItemFieldSchemas, 
    IEnumerable<IndexSchema> customIndexedFieldSchemas
)
public override function InitializeReplicaMetadata (
    idFormats : SyncIdFormatGroup, 
    replicaId : SyncId, 
    customItemFieldSchemas : IEnumerable<FieldSchema>, 
    customIndexedFieldSchemas : IEnumerable<IndexSchema>
) : ReplicaMetadata

Параметры

  • idFormats
    Схема форматов идентификаторов для поставщика.
  • replicaId
    Идентификатор реплики, связанной с этими метаданными.
  • customItemFieldSchemas
    Коллекция данных схемы для пользовательских полей метаданных каждого элемента метаданных. Может иметь значение пустая ссылка (Nothing в Visual Basic), если пользовательских полей метаданных не существует.
  • customIndexedFieldSchemas
    Список схем индексов, которые можно использовать для более эффективного поиска элементов в хранилище метаданных. Может иметь значение NULL, если пользовательских индексов не существует.

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

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

Исключения

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

ObjectDisposedException

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

ArgumentNullException

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

ArgumentException

Какое-либо из имен пользовательских полей в списке customItemFieldSchemas имеет нулевую длину.

NullReferenceException

Какое-либо из имен пользовательских полей в списке customItemFieldSchemas равно пустая ссылка (Nothing в Visual Basic).

MetadataFieldNotFoundException

Поле, имеющееся в списке customIndexedFieldSchemas, отсутствует в списке customItemFieldSchemas.

SyncIdFormatMismatchException

Формат параметра replicaId не соответствует формату, указанному в списке idFormats.

ArgumentOutOfRangeException

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

InvalidOperationException

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

ReplicaMetadataAlreadyExistsException

Метаданные реплики для указанного идентификатора replicaId уже существуют в хранилище метаданных.

Замечания

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

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

Параметр customItemFieldSchemas позволяет определить набор пользовательских полей для метаданных элемента. Каждое поле состоит из уникального строкового имени и значения. Эти поля могут хранить любые дополнительные метаданные об элементе, которые не поддерживаются в стандартном наборе метаданных для элемента. Доступ к полям производится через различные методы класса ItemMetadata, например ItemMetadata.GetByteField или Microsoft.Synchronization.MetadataStorage.ItemMetadata.SetCustomField.

Набор схем индексов можно определить с помощью параметра customIndexedFieldSchemas таким образом, чтобы наборы пользовательских полей можно было использовать в качестве индексов для эффективного поиска элементов в хранилище метаданных. Схему индекса можно определить как уникальную, чтобы индекс гарантированно указывал на один элемент. Каждое поле, содержащееся в схеме индекса, должно существовать и в схеме пользовательских полей, определенной для реплики. Поля индекса могут использоваться в таких методах, как ReplicaMetadata.FindItemMetadataByIndexedField и ReplicaMetadata.FindItemMetadataByUniqueIndexedFields.

Пример

В следующем примере производится инициализация метаданных реплики в объекте 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