Partager via


InitializeReplicaMetadata méthode

Crée et initialise les métadonnées pour un réplica dans le magasin des métadonnées et retourne un objet des métadonnées du réplica utilisé pour accéder aux métadonnées de réplica.

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

Syntaxe

'Déclaration
Public Overrides Function InitializeReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId, _
    customItemFieldSchemas As IEnumerable(Of FieldSchema), _
    customIndexedFieldSchemas As IEnumerable(Of IndexSchema) _
) As ReplicaMetadata
'Utilisation
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

Paramètres

  • customItemFieldSchemas
    Type : System.Collections.Generic. . :: . .IEnumerable< (Of < ( <'FieldSchema> ) > ) >
    Collection d'informations de schéma pour les champs de métadonnées personnalisés pour chaque élément de métadonnées. Peut être une nullNothingnullptrunitune référence Null (Nothing dans Visual Basic) lorsqu'il n'y a pas de champs de métadonnées personnalisés.
  • customIndexedFieldSchemas
    Type : System.Collections.Generic. . :: . .IEnumerable< (Of < ( <'IndexSchema> ) > ) >
    Liste des schémas d'index qui peuvent être utilisés pour rechercher plus efficacement des éléments dans le magasin des métadonnées. Peut être une nullNothingnullptrunitune référence Null (Nothing dans Visual Basic) lorsqu'il n'y a pas d'index personnalisés.

Valeur de retour

Type : Microsoft.Synchronization.MetadataStorage. . :: . .ReplicaMetadata
L'objet des métadonnées du réplica utilisé pour accéder aux métadonnées du réplica dans le magasin des métadonnées.

Exceptions

Exception Condition
ObjectDisposedException

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

ArgumentNullException

idFormats ou replicaId est une null Nothing nullptr unit une référence Null (Nothing dans Visual Basic) .

ArgumentException

Un des noms de champ personnalisé dans customItemFieldSchemas est de longueur 0.

NullReferenceException

Un des noms de champ personnalisé dans customItemFieldSchemas est une null Nothing nullptr unit une référence Null (Nothing dans Visual Basic) .

MetadataFieldNotFoundException

Un champ répertorié dans customIndexedFieldSchemas n'existe pas dans customItemFieldSchemas.

SyncIdFormatMismatchException

Le format de replicaId ne correspond pas au format spécifié dans idFormats.

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éé.

ReplicaMetadataAlreadyExistsException

Les métadonnées de réplica existent déjà dans le magasin des métadonnées pour le replicaId spécifié.

Notes

Cette méthode est utilisée pour créer un nouveau jeu de métadonnées de réplica dans le magasin des métadonnées. Pour accéder aux métadonnées de réplica existants dans un magasin des métadonnées, utilisez GetReplicaMetadata.

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.

Un ensemble de champs personnalisés peut être défini pour les métadonnées d'élément en utilisant customItemFieldSchemas. Chaque champ consiste en un nom de chaîne unique et une valeur. Ces champs peuvent stocker toutes les éventuelles métadonnées supplémentaires concernant un élément qui n'est pas pris en charge par le jeu par défaut de métadonnées d'élément. Les champs peuvent faire l'objet d'un accès via différentes méthodes sur ItemMetadata, comme ItemMetadata..::..GetByteField ou ItemMetadata..::..SetCustomField.

Un ensemble de schémas d'index peut être défini à l'aide de customIndexedFieldSchemas afin que les ensembles de champs personnalisés puissent être utilisés comme index pour rechercher efficacement des éléments dans le magasin des métadonnées. Un schéma d'index peut être défini comme étant unique afin de garantir que l'index définit un élément. Chaque champ contenu dans un schéma d'index doit également exister dans le schéma de champ personnalisé qui est défini pour le réplica. Les champs d'index peuvent être utilisés dans des méthodes comme ReplicaMetadata..::..FindItemMetadataByIndexedField et ReplicaMetadata..::..FindItemMetadataByUniqueIndexedFields.

Exemples

L'exemple suivant initialise les métadonnées de réplica dans un objet SqlMetadataStore lorsque les métadonnées de réplica n'existent pas déjà. L'exemple spécifie un jeu de champs personnalisés dans les métadonnées de réplica et indique également que les champs personnalisés sont utilisés en tant qu'index unique.

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

SqlMetadataStore Classe

Membres SqlMetadataStore

Espace de noms Microsoft.Synchronization.MetadataStorage