Condividi tramite


Metodo SqlMetadataStore.GetReplicaMetadata

Ottiene un oggetto dei metadati della replica utilizzato per accedere ai metadati della replica nell'archivio dei metadati.

Spazio dei nomi: Microsoft.Synchronization.MetadataStorage
Assembly: Microsoft.Synchronization.MetadataStorage (in microsoft.synchronization.metadatastorage.dll)

Sintassi

'Dichiarazione
Public Overrides Function GetReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId _
) As ReplicaMetadata
'Utilizzo
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

Parametri

  • idFormats
    Schema del formato dell'ID del provider.
  • replicaId
    ID della replica associata ai metadati.

Valore restituito

Oggetto dei metadati della replica utilizzato per accedere ai metadati della replica nell'archivio dei metadati.

Eccezioni

Tipo di eccezione Condizione

ObjectDisposedException

L'oggetto è stato eliminato o non è stato inizializzato correttamente.

ArgumentNullException

idFormats o replicaId è Null.

SyncIdFormatMismatchException

Il formato di replicaId non corrisponde al formato specificato in idFormats oppure idFormats non corrisponde allo schema del formato dell'ID utilizzato per l'inizializzazione dei metadati della replica.

ArgumentOutOfRangeException

La lunghezza di un ID specificato da idFormats è superiore a 8000 byte.

InvalidOperationException

Non è stato aperto né creato un archivio dei metadati.

ReplicaMetadataInUseException

Un'istanza di questo oggetto dei metadati della replica è già attiva.

ReplicaMetadataNotFoundException

Impossibile trovare i metadati della replica con ID replicaId.

Osservazioni

Questo metodo viene utilizzato per accedere ai metadati della replica che esistono già nell'archivio dei metadati. Per creare i nuovi metadati della replica in un archivio dei metadati, utilizzare InitializeReplicaMetadata.

Questo metodo restituisce l'implementazione della classe astratta ReplicaMetadata fornita dal servizio di archiviazione dei metadati. Questa classe astratta può essere utilizzata per accedere ai metadati della replica archiviati nel file di database di Sync Framework.

Per impedire alle applicazioni di eseguire aggiornamenti simultanei in conflitto nell'archivio dei metadati, non sono consentite più istanze in sospeso di ReplicaMetadata per un determinato ID replica. Le applicazioni possono accedere allo stesso oggetto ReplicaMetadata da più thread, ma più processi non possono accedere contemporaneamente ai metadati della replica. Se esiste già un'istanza in sospeso di ReplicaMetadata per un determinato ID replica, questo metodo genera ReplicaMetadataInUseException.

Esempio

Nell'esempio seguente vengono acquisiti i metadati della replica in un oggetto SqlMetadataStore quando tali metadati sono già disponibili. Viene quindi enumerato l'archivio di elementi e vengono trovati i metadati per ogni 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;
    }
}

Vedere anche

Riferimento

Classe SqlMetadataStore
Membri SqlMetadataStore
Spazio dei nomi Microsoft.Synchronization.MetadataStorage