InitializeReplicaMetadata Método

Crea e inicializa los metadatos para una réplica en el almacén de metadatos y devuelve un objeto de metadatos de réplica que se utiliza para tener acceso a los metadatos de réplica.

Espacio de nombres:  Microsoft.Synchronization.MetadataStorage
Ensamblado:  Microsoft.Synchronization.MetadataStorage (en Microsoft.Synchronization.MetadataStorage.dll)

Sintaxis

'Declaración
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
abstract InitializeReplicaMetadata : 
        idFormats:SyncIdFormatGroup * 
        replicaId:SyncId * 
        customItemFieldSchemas:IEnumerable<FieldSchema> * 
        customIndexedFieldSchemas:IEnumerable<IndexSchema> -> ReplicaMetadata 
override InitializeReplicaMetadata : 
        idFormats:SyncIdFormatGroup * 
        replicaId:SyncId * 
        customItemFieldSchemas:IEnumerable<FieldSchema> * 
        customIndexedFieldSchemas:IEnumerable<IndexSchema> -> ReplicaMetadata 
public override function InitializeReplicaMetadata(
    idFormats : SyncIdFormatGroup, 
    replicaId : SyncId, 
    customItemFieldSchemas : IEnumerable<FieldSchema>, 
    customIndexedFieldSchemas : IEnumerable<IndexSchema>
) : ReplicaMetadata

Parámetros

  • customItemFieldSchemas
    Tipo: System.Collections.Generic. . :: . .IEnumerable< (Of < ( <'FieldSchema> ) > ) >
    Colección de información de esquema para los campos de metadatos personalizados de cada elemento de metadatos. Puede ser un valor NULL si no existen campos de metadatos personalizados.
  • customIndexedFieldSchemas
    Tipo: System.Collections.Generic. . :: . .IEnumerable< (Of < ( <'IndexSchema> ) > ) >
    Lista de esquemas de índice que pueden utilizarse para buscar elementos en el almacén de metadatos con más eficacia. Puede ser un valor NULL si no hay índices personalizados.

Valor devuelto

Tipo: Microsoft.Synchronization.MetadataStorage. . :: . .ReplicaMetadata
El objeto de metadatos de réplica que se usa para tener acceso a los metadatos de réplica del almacén de metadatos.

Excepciones

Excepción Condición
ObjectDisposedException

Este objeto se ha eliminado o no se ha inicializado correctamente.

ArgumentNullException

idFormats o replicaId es una null Nothing nullptr unit es una referencia NULL (Nothing en Visual Basic). .

ArgumentException

Cualquiera de los nombres de campos personalizados de customItemFieldSchemas tiene longitud 0.

NullReferenceException

Cualquiera de los nombres de campos personalizados de customItemFieldSchemas es una null Nothing nullptr unit es una referencia NULL (Nothing en Visual Basic). .

MetadataFieldNotFoundException

Un campo enumerado en customIndexedFieldSchemas no existe en customItemFieldSchemas.

SyncIdFormatMismatchException

El formato de replicaId no coincide con el formato especificado en idFormats.

ArgumentOutOfRangeException

La longitud de un identificador especificado por idFormats es superior a 8000 bytes.

InvalidOperationException

No se ha abierto o creado un almacén de metadatos.

ReplicaMetadataAlreadyExistsException

Ya existen metadatos de réplica en el almacén de metadatos para el replicaId especificado.

Notas

Este método se usa para crear un nuevo conjunto de metadatos de réplica en el almacén de metadatos. Para tener acceso a los metadatos de réplica existentes en un almacén de metadatos, use GetReplicaMetadata.

Este método devuelve la implementación de la clase abstracta ReplicaMetadata proporcionada por Metadata Storage Services. Esta clase abstracta se puede usar para tener acceso a los metadatos de réplica que están almacenados en el archivo de base de datos de Sync Framework.

Se puede definir un conjunto de campos personalizados para los metadatos del elemento mediante customItemFieldSchemas. Cada campo está compuesto por un nombre de cadena único y un valor. Si existen metadatos adicionales relacionados con un elemento que no son admitidos por el conjunto predeterminado de metadatos de elementos, pueden almacenarse en estos campos. Se puede tener acceso a los campos a través de diversos métodos de ItemMetadata, como ItemMetadata..::..GetByteField o ItemMetadata..::..SetCustomField.

Se puede definir un conjunto de esquemas de índice con customIndexedFieldSchemas para que los conjuntos de campos personalizados se puedan usar como índices para buscar eficazmente elementos en el almacén de metadatos. Un esquema de índice se puede definir como único para asegurarse de que el índice define un solo elemento. Cada uno de los campos contenidos en un esquema de índice también debe existir en el esquema de campos personalizados definido para la réplica. Los campos de índice se pueden usar en métodos como ReplicaMetadata..::..FindItemMetadataByIndexedField y ReplicaMetadata..::..FindItemMetadataByUniqueIndexedFields.

Ejemplos

En el ejemplo siguiente se inicializan los metadatos de réplica de un objeto SqlMetadataStore cuando aún no existen metadatos de réplica. En el ejemplo se especifica un conjunto de campos personalizados en los metadatos de réplica y también se especifica que los campos personalizados se utilizan como un índice único.

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

Vea también

Referencia

SqlMetadataStore Clase

SqlMetadataStore Miembros

Microsoft.Synchronization.MetadataStorage Espacio de nombres