다음을 통해 공유


SqlMetadataStore.GetReplicaMetadata 메서드

메타데이터 저장소의 복제본 메타데이터에 액세스하는 데 사용되는 복제본 메타데이터 개체를 가져옵니다.

네임스페이스: Microsoft.Synchronization.MetadataStorage
어셈블리: microsoft.synchronization.metadatastorage.dll의 Microsoft.Synchronization.MetadataStorage

구문

‘선언
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
    공급자에 대한 ID 형식 스키마입니다.
  • replicaId
    이 메타데이터와 연결된 복제본의 ID입니다.

반환 값

메타데이터 저장소의 복제본 메타데이터에 액세스하는 데 사용되는 복제본 메타데이터 개체입니다.

예외

예외 형식 조건

ObjectDisposedException

이 개체가 삭제되었거나, 올바르게 초기화되지 않았습니다.

ArgumentNullException

idFormats 또는 replicaId가 null 참조(Visual Basic에서는 Nothing)입니다.

SyncIdFormatMismatchException

replicaId의 형식이 idFormats에 지정된 형식과 일치하지 않거나, idFormats가 복제본 메타데이터가 초기화될 때 사용된 ID 형식 스키마와 일치하지 않습니다.

ArgumentOutOfRangeException

idFormats에 지정된 ID 길이가 8000바이트를 초과합니다.

InvalidOperationException

메타데이터 저장소를 열거나 만들지 않았습니다.

ReplicaMetadataInUseException

이 복제본 메타데이터 개체의 인스턴스가 이미 활성 상태입니다.

ReplicaMetadataNotFoundException

ID가 replicaId인 복제본 메타데이터를 찾을 수 없습니다.

주의

이 메서드는 메타데이터 저장소에 이미 있는 복제본 메타데이터에 액세스하는 데 사용됩니다. 메타데이터 저장소에 새 복제본 메타데이터를 만들려면 InitializeReplicaMetadata를 사용합니다.

이 메서드는 Metadata Storage Service에서 제공하는 ReplicaMetadata 추상 클래스의 구현을 반환합니다. 이 추상 클래스를 사용하면 Sync Framework 데이터베이스 파일에 저장된 복제본 메타데이터에 액세스할 수 있습니다.

응용 프로그램이 메타데이터 저장소에 서로 충돌하는 업데이트 내용을 적용하지 않도록 특정 복제본 ID에 대해 처리 중인 ReplicaMetadata 인스턴스를 여러 개 사용할 수 없습니다. 응용 프로그램은 여러 스레드에서 동일한 ReplicaMetadata 개체에 액세스할 수 있지만 여러 프로세스에서 동시에 복제본 메타데이터에 액세스할 수 없습니다. 특정 복제본 ID에 대해 처리 중인 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 네임스페이스