Compartilhar via


Método SqlMetadataStore.InitializeReplicaMetadata

Cria e inicializa metadados para uma réplica no repositório de metadados e retorna um objeto de metadados de réplica que é usado para acessar esses metadados.

Namespace: Microsoft.Synchronization.MetadataStorage
Assembly: Microsoft.Synchronization.MetadataStorage (em microsoft.synchronization.metadatastorage.dll)

Sintaxe

'Declaração
Public Overrides Function InitializeReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId, _
    customItemFieldSchemas As IEnumerable(Of FieldSchema), _
    customIndexedFieldSchemas As IEnumerable(Of IndexSchema) _
) As ReplicaMetadata
'Uso
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

Parâmetros

  • idFormats
    O esquema de formato da ID do provedor.
  • replicaId
    A ID da réplica associada a esses metadados.
  • customItemFieldSchemas
    A coleção de informações de esquema dos campos de metadados personalizados para cada item de metadados. Pode ser um referência nula (Nothing no Visual Basic) quando não há nenhum campo de metadados personalizado.
  • customIndexedFieldSchemas
    A lista de esquemas de índice que pode ser usada para localizar itens no repositório de metadados de forma mais eficiente. Pode ser um referência nula (Nothing no Visual Basic) quando não há nenhum índice personalizado.

Valor de retorno

Um objeto de metadados da réplica que é usado para acessar os metadados da réplica no repositório de metadados.

Exceções

Tipo de exceção Condição

ObjectDisposedException

Este objeto foi descartado ou não foi inicializado corretamente.

ArgumentNullException

idFormats ou replicaId é um referência nula (Nothing no Visual Basic).

ArgumentException

Qualquer um dos nomes de campo personalizados no customItemFieldSchemas tem comprimento 0.

NullReferenceException

Qualquer um dos nomes de campo personalizados no customItemFieldSchemas é um referência nula (Nothing no Visual Basic).

MetadataFieldNotFoundException

Um campo listado em customIndexedFieldSchemas não existe em customItemFieldSchemas.

SyncIdFormatMismatchException

O formato da replicaId não corresponde ao formato especificado nos idFormats.

ArgumentOutOfRangeException

O comprimento de uma ID especificada por idFormats é maior que 8000 bytes.

InvalidOperationException

Um repositório de metadados não foi aberto ou criado.

ReplicaMetadataAlreadyExistsException

Os metadados de réplica já existem no repositório de metadados para a replicaId especificada.

Comentários

Este método é usado para criar um novo conjunto de metadados da réplica no repositório de metadados. Para acessar metadados da réplica existentes em um repositório de metadados, use GetReplicaMetadata.

Esse método retorna a implementação da classe abstrata ReplicaMetadata que é fornecida pelo serviço de armazenamento de metadados. Essa classe abstrata pode ser usada para acessar metadados da réplica que estejam armazenados no arquivo de banco de dados do Sync Framework.

Um conjunto de campos personalizados pode ser definido para metadados de item usando customItemFieldSchemas. Cada campo consiste em um nome de cadeia de caracteres exclusivo e um valor. Esses campos podem armazenar quaisquer metadados adicionais sobre um item que não é suportado de outra forma pelo conjunto padrão de metadados do item. Os campos podem ser acessados através de vários métodos no ItemMetadata, como ItemMetadata.GetByteField ou Microsoft.Synchronization.MetadataStorage.ItemMetadata.SetCustomField.

Um conjunto de esquemas de índice pode ser definido com o uso de customIndexedFieldSchemas de forma que conjuntos de campos personalizados possam ser usados como índices para a localização eficiente de itens no repositório de metadados. Um esquema de índice pode ser definido como exclusivo para assegurar que ele defina um item. Cada campo contido em um esquema de índice também deve existir no esquema de campo personalizado definido para a réplica. Os campos de índice podem ser usados em métodos como ReplicaMetadata.FindItemMetadataByIndexedField e ReplicaMetadata.FindItemMetadataByUniqueIndexedFields.

Exemplo

O exemplo a seguir inicializa os metadados de réplica em um objeto SqlMetadataStore quando esses metadados ainda não existirem. O exemplo especifica um conjunto de campos personalizados nos metadados de réplica e também especifica que os campos personalizados são usados como um índice exclusivo.

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;
    }
}

Consulte também

Referência

Classe SqlMetadataStore
Membros SqlMetadataStore
Namespace Microsoft.Synchronization.MetadataStorage