Método SqlMetadataStore.GetReplicaMetadata
Obtém um objeto de metadados da réplica que é usado para acessar os metadados da réplica no repositório de metadados.
Namespace: Microsoft.Synchronization.MetadataStorage
Assembly: Microsoft.Synchronization.MetadataStorage (em microsoft.synchronization.metadatastorage.dll)
Sintaxe
'Declaração
Public Overrides Function GetReplicaMetadata ( _
idFormats As SyncIdFormatGroup, _
replicaId As SyncId _
) As ReplicaMetadata
'Uso
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
Parâmetros
- idFormats
O esquema de formato da ID do provedor.
- replicaId
A ID da réplica associada a esses metadados.
Valor de retorno
Um objeto de metadados da réplica que é usado para acessar os metadados da réplica no repositório de metadados.
Exceções
Tipo de exceção | Condição |
---|---|
Este objeto foi descartado ou não foi inicializado corretamente. |
|
idFormats ou replicaId é um referência nula (Nothing no Visual Basic). |
|
O formato da replicaId não corresponde ao formato especificado nos idFormats ou os idFormats não correspondem ao esquema de formato de ID usado quando os metadados de réplica foram inicializados. |
|
O comprimento de uma ID especificada por idFormats é maior que 8000 bytes. |
|
Um repositório de metadados não foi aberto ou criado. |
|
Uma instância deste objeto de metadados da réplica já está ativa. |
|
Os metadados de réplica que têm ID de replicaId não foram encontrados. |
Comentários
Este método é usado para acessar os metadados da réplica que já existem no repositório de metadados. Para criar novos metadados da réplica em um repositório de metadados, use InitializeReplicaMetadata.
Esse método retorna a implementação da classe abstrata ReplicaMetadata que é fornecida pelo serviço de armazenamento de metadados. Essa classe abstrata pode ser usada para acessar metadados da réplica que estejam armazenados no arquivo de banco de dados do Sync Framework.
Para impedir que aplicativos façam atualizações simultâneas conflitantes no repositório de metadados, não são permitidas várias instâncias pendentes do ReplicaMetadata para uma ID de réplica específica. Os aplicativos podem acessar o mesmo objeto ReplicaMetadata de vários threads, porém vários processos não podem acessar os metadados da réplica ao mesmo tempo. Se já houver uma instância pendente de ReplicaMetadata para uma ID de réplica específica, esse método irá gerar ReplicaMetadataInUseException.
Exemplo
O exemplo a seguir obtém metadados de réplica em um objeto SqlMetadataStore quando esses metadados já existirem. O exemplo enumera o repositório de itens e localiza os metadados de cada item.
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;
}
}
Consulte também
Referência
Classe SqlMetadataStore
Membros SqlMetadataStore
Namespace Microsoft.Synchronization.MetadataStorage