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 |
---|---|
Dieses Objekt wurde verworfen oder nicht ordnungsgemäß initialisiert. |
|
idFormats oder replicaId ist NULL. |
|
Einer der benutzerdefinierten Feldnamen in customItemFieldSchemas hat die Länge 0. |
|
Einer der benutzerdefinierten Feldnamen in customItemFieldSchemas ist NULL. |
|
Ein in customIndexedFieldSchemas aufgeführtes Feld ist nicht in customItemFieldSchemas vorhanden. |
|
Das Format von replicaId stimmt nicht mit dem in idFormats angegebenen Format überein. |
|
Die Länge einer von idFormats angegebenen ID beträgt mehr als 8000 Bytes. |
|
Es wurde kein Metadatenspeicher geöffnet oder erstellt. |
|
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