Partager via


Méthode SqlMetadataStore.GetReplicaMetadata

Obtient un objet des métadonnées du réplica utilisé pour accéder aux métadonnées de réplica dans le magasin des métadonnées.

Espace de noms: Microsoft.Synchronization.MetadataStorage
Assembly: Microsoft.Synchronization.MetadataStorage (dans microsoft.synchronization.metadatastorage.dll)

Syntaxe

'Déclaration
Public Overrides Function GetReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId _
) As ReplicaMetadata
'Utilisation
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

Paramètres

  • idFormats
    Schéma du format de l'ID du fournisseur.
  • replicaId
    ID du réplica associé à ces métadonnées.

Valeur de retour

Objet des métadonnées du réplica utilisé pour accéder aux métadonnées de réplica dans le magasin des métadonnées.

Exceptions

Type d'exception Condition

ObjectDisposedException

Cet objet a été éliminé ou n'a pas été initialisé correctement.

ArgumentNullException

idFormats ou replicaId est une référence nulle (Rien dans Visual Basic).

SyncIdFormatMismatchException

Le format de replicaId ne correspond pas au format spécifié dans idFormats, ou idFormats ne correspond pas au schéma de format d'ID utilisé lors de l'initialisation des métadonnées de réplica.

ArgumentOutOfRangeException

La longueur d'un ID spécifiée par idFormats est supérieure à 8 000 octets.

InvalidOperationException

Un magasin des métadonnées n'a pas été ouvert ou créé.

ReplicaMetadataInUseException

Une instance de cet objet des métadonnées du réplica est déjà active.

ReplicaMetadataNotFoundException

Les métadonnées de réplica portant l'ID replicaId sont introuvables.

Notes

Cette méthode est utilisée pour accéder aux métadonnées de réplica qui existent déjà dans le magasin des métadonnées. Pour créer des métadonnées de réplica dans un magasin des métadonnées, utilisez InitializeReplicaMetadata.

Cette méthode retourne l'implémentation de la classe abstraite ReplicaMetadata fournie par le service de stockage des métadonnées. Cette classe abstraite peut être utilisée pour accéder aux métadonnées de réplica stockées dans le fichier de base de données Sync Framework.

Pour empêcher les applications d'effectuer des mises à jour simultanées conflictuelles dans le magasin des métadonnées, il n'est pas admis d'avoir plusieurs instances en attente de ReplicaMetadata pour un ID de réplica en particulier. Les applications peuvent accéder au même objet ReplicaMetadata à partir de plusieurs threads, mais plusieurs processus ne peuvent pas accéder aux métadonnées de réplica en même temps. Si une instance en attente de ReplicaMetadata pour un ID de réplica particulier existe déjà, cette méthode lève ReplicaMetadataInUseException.

Exemple

L'exemple suivant obtient les métadonnées de réplica dans un objet SqlMetadataStore lorsque les métadonnées de réplica existent déjà. L'exemple énumère ensuite le magasin d'éléments et recherche les métadonnées de chaque élément.

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

Voir aussi

Référence

Classe SqlMetadataStore
Membres SqlMetadataStore
Espace de noms Microsoft.Synchronization.MetadataStorage