Freigeben über


SqlMetadataStore.InitializeReplicaMetadata-Methode

Erstellt und initialisiert Metadaten für ein Replikat im Metadatenspeicher und gibt ein Replikatmetadatenobjekt zurück, das für den Zugriff auf die Replikatmetadaten verwendet wird.

Namespace: Microsoft.Synchronization.MetadataStorage
Assembly: Microsoft.Synchronization.MetadataStorage (in microsoft.synchronization.metadatastorage.dll)

Syntax

'Declaration
Public Overrides Function InitializeReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId, _
    customItemFieldSchemas As IEnumerable(Of FieldSchema), _
    customIndexedFieldSchemas As IEnumerable(Of IndexSchema) _
) As ReplicaMetadata
'Usage
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
public ReplicaMetadata InitializeReplicaMetadata (
    SyncIdFormatGroup idFormats, 
    SyncId replicaId, 
    IEnumerable<FieldSchema> customItemFieldSchemas, 
    IEnumerable<IndexSchema> customIndexedFieldSchemas
)
public override function InitializeReplicaMetadata (
    idFormats : SyncIdFormatGroup, 
    replicaId : SyncId, 
    customItemFieldSchemas : IEnumerable<FieldSchema>, 
    customIndexedFieldSchemas : IEnumerable<IndexSchema>
) : ReplicaMetadata

Parameter

  • idFormats
    Das ID-Formatschema für den Anbieter.
  • replicaId
    Die Replikat-ID, die diesen Metadaten zugeordnet ist.
  • customItemFieldSchemas
    Die Auflistung der Schemainformationen für die benutzerdefinierten Metadatenfelder für jedes Metadatenelement. Kann NULL sein, wenn keine benutzerdefinierten Metadatenfelder vorhanden sind.
  • customIndexedFieldSchemas
    Die Liste der Indexschemas, die zur effizienteren Suche der Elemente im Metadatenspeicher verwendet werden können. Der Wert NULL-Verweis (Nothing in Visual Basic) ist zulässig, wenn keine benutzerdefinierten Indizes vorhanden sind.

Rückgabewert

Das Replikatmetadatenobjekt, das für den Zugriff auf die Replikatmetadaten im Metadatenspeicher verwendet wird.

Ausnahmen

Ausnahmetyp Bedingung

ObjectDisposedException

Dieses Objekt wurde verworfen oder nicht ordnungsgemäß initialisiert.

ArgumentNullException

idFormats oder replicaId ist NULL.

ArgumentException

Einer der benutzerdefinierten Feldnamen in customItemFieldSchemas hat die Länge 0.

NullReferenceException

Einer der benutzerdefinierten Feldnamen in customItemFieldSchemas ist NULL.

MetadataFieldNotFoundException

Ein in customIndexedFieldSchemas aufgeführtes Feld ist nicht in customItemFieldSchemas vorhanden.

SyncIdFormatMismatchException

Das Format von replicaId stimmt nicht mit dem in idFormats angegebenen Format überein.

ArgumentOutOfRangeException

Die Länge einer von idFormats angegebenen ID beträgt mehr als 8000 Bytes.

InvalidOperationException

Es wurde kein Metadatenspeicher geöffnet oder erstellt.

ReplicaMetadataAlreadyExistsException

Replikatmetadaten für die angegebene replicaId sind bereits im Metadatenspeicher vorhanden.

Hinweise

Diese Methode wird verwendet, um einen neuen Satz von Replikatmetadaten im Metadatenspeicher zu erstellen. Um auf vorhandene Replikatmetadaten in einem Metadatenspeicher zuzugreifen, verwenden Sie GetReplicaMetadata.

Diese Methode gibt die Implementierung der abstrakten ReplicaMetadata-Klasse zurück, die vom Metadaten-Speicherdienst bereitgestellt wird. Diese abstrakte Klasse kann verwendet werden, um auf in der Sync Framework-Datenbankdatei gespeicherte Replikatmetadaten zuzugreifen.

Ein Satz benutzerdefinierter Felder kann mithilfe von customItemFieldSchemas für Elementmetadaten definiert werden. Jedes Feld besteht aus einem eindeutigen Zeichenfolgennamen und einem Wert. Mithilfe dieser Felder können zusätzliche Metadaten zu einem Element gespeichert werden, die nicht vom Standardsatz der Elementmetadaten unterstützt werden. Auf die Felder kann mithilfe verschiedener Methoden von ItemMetadata zugegriffen werden, z. B. mit ItemMetadata.GetByteField oder Microsoft.Synchronization.MetadataStorage.ItemMetadata.SetCustomField.

Ein Satz von Indexschemas kann mithilfe von customIndexedFieldSchemas so definiert werden, dass Sätze benutzerdefinierter Felder als Indizes zum effizienten Suchen von Elementen im Metadatenspeicher verwendet werden können. Ein Indexschema kann als eindeutig definiert werden, um sicherzustellen, dass der Index ein einzelnes Element definiert. Jedes in einem Indexschema enthaltene Feld muss auch im benutzerdefinierten Feldschema vorhanden sein, das für das Replikat definiert ist. Indexfelder können in Methoden wie ReplicaMetadata.FindItemMetadataByIndexedField und ReplicaMetadata.FindItemMetadataByUniqueIndexedFields verwendet werden.

Beispiel

Im folgenden Beispiel werden Replikatmetadaten in einem SqlMetadataStore-Objekt initialisiert, wenn noch keine Replikatmetadaten vorhanden sind. Im Beispiel wird eine Gruppe benutzerdefinierter Felder in den Replikatmetadaten angegeben, zudem wird angegeben, dass die benutzerdefinierten Felder als eindeutiger Index verwendet werden.

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

Siehe auch

Verweis

SqlMetadataStore-Klasse
SqlMetadataStore-Member
Microsoft.Synchronization.MetadataStorage-Namespace