GetReplicaMetadata Método

Obtiene un objeto de metadatos de réplica que se usa para tener acceso a los metadatos de réplica del almacén de metadatos.

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

Sintaxis

'Declaración
Public Overrides Function GetReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId _
) As ReplicaMetadata
'Uso
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
abstract GetReplicaMetadata : 
        idFormats:SyncIdFormatGroup * 
        replicaId:SyncId -> ReplicaMetadata 
override GetReplicaMetadata : 
        idFormats:SyncIdFormatGroup * 
        replicaId:SyncId -> ReplicaMetadata 
public override function GetReplicaMetadata(
    idFormats : SyncIdFormatGroup, 
    replicaId : SyncId
) : ReplicaMetadata

Parámetros

Valor devuelto

Tipo: Microsoft.Synchronization.MetadataStorage. . :: . .ReplicaMetadata
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). .

SyncIdFormatMismatchException

El formato de replicaId no coincide con el formato especificado en idFormats, o idFormats no coincide con el esquema de formato de identificador que se usó cuando se inicializaron los metadatos de réplica.

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.

ReplicaMetadataInUseException

Hay una instancia de este objeto de metadatos de réplica que ya está activa.

ReplicaMetadataNotFoundException

No se han encontrado los metadatos de réplica cuyo identificador es replicaId.

Notas

Este método se usa para tener acceso a los metadatos de réplica que ya existen en el almacén de metadatos. Para crear nuevos metadatos de réplica en un almacén de metadatos, use InitializeReplicaMetadata.

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.

Para evitar que las aplicaciones realicen actualizaciones conflictivas simultáneas en el almacén de metadatos, no se permite la existencia de varias instancias pendientes de ReplicaMetadata para un identificador de réplica determinado. Las aplicaciones pueden tener acceso al mismo objeto ReplicaMetadata desde varios subprocesos, pero varios procesos no pueden tener acceso a los metadatos de réplica al mismo tiempo. Si ya existe una instancia pendiente de ReplicaMetadata para un identificador de réplica determinado, este método produce ReplicaMetadataInUseException.

Ejemplos

En el ejemplo siguiente se obtienen los metadatos de réplica de un objeto SqlMetadataStore cuando ya existen metadatos de réplica. A continuación, en el ejemplo se enumera el almacén de elementos y se buscan los metadatos para cada elemento.

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