Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возвращает объект метаданных реплики, который используется для доступа к метаданным реплики в хранилище метаданных.
Пространство имен: Microsoft.Synchronization.MetadataStorage
Сборка: Microsoft.Synchronization.MetadataStorage (в microsoft.synchronization.metadatastorage.dll)
Синтаксис
'Декларация
Public Overrides Function GetReplicaMetadata ( _
idFormats As SyncIdFormatGroup, _
replicaId As SyncId _
) As ReplicaMetadata
'Применение
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
Параметры
- idFormats
Схема форматов идентификаторов для поставщика.
- replicaId
Идентификатор реплики, связанной с этими метаданными.
Возвращаемое значение
Объект метаданных реплики, который используется для доступа к метаданным реплики в хранилище метаданных.
Исключения
| Тип исключения | Условие |
|---|---|
Этот объект был удален или не был правильно инициализирован. |
|
Параметр idFormats или replicaId равен пустая ссылка (Nothing в Visual Basic). |
|
Формат параметра replicaId не соответствует формату, указанному в списке idFormats, либо idFormats не соответствует схеме идентификаторов форматов, указанной при инициализации метаданных реплики. |
|
Длина идентификатора, заданного параметром idFormats, превышает 8000 байт. |
|
Хранилище метаданных не открыто или не создано. |
|
Уже активен экземпляр этого объекта метаданных реплики. |
|
Метаданные реплики с указанным идентификатором replicaId не найдены. |
Замечания
Этот метод используется для доступа к метаданным реплик, которые уже существуют в хранилище метаданных. Чтобы создать новые метаданные реплики в хранилище метаданных, используйте метод InitializeReplicaMetadata.
Этот метод возвращает реализацию абстрактного класса ReplicaMetadata, предоставляемую службой хранилища метаданных. Этот абстрактный класс можно использовать для доступа к метаданным реплики, хранящимся в файле базы данных Sync Framework.
Чтобы избежать ситуации, когда приложения одновременно выполняют конфликтующие операции обновления в хранилище метаданных, для одного идентификатора реплики не допускается наличие нескольких необработанных экземпляров объекта ReplicaMetadata. Приложения могут получать доступ к одному и тому же объекту ReplicaMetadata из нескольких потоков, но несколько процессов не могут получить одновременный доступ к метаданным реплики. Если необработанный экземпляр объекта ReplicaMetadata для конкретного идентификатора реплики уже существует, этот метод создает исключение ReplicaMetadataInUseException.
Пример
В следующем примере производится получение метаданных реплики в объект SqlMetadataStore, причем метаданные реплики уже существуют. После этого производится перечисление хранилища элементов и поиск метаданных для каждого элемента.
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;
}
}
См. также
Справочник
Класс SqlMetadataStore
Элементы SqlMetadataStore
Пространство имен Microsoft.Synchronization.MetadataStorage