다음을 통해 공유


SqlMetadataStore.InitializeReplicaMetadata 메서드

메타데이터 저장소의 복제본에 대한 메타데이터를 만들고 초기화하며 복제본 메타데이터에 액세스하는 데 사용되는 복제본 메타데이터 개체를 반환합니다.

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

구문

‘선언
Public Overrides Function InitializeReplicaMetadata ( _
    idFormats As SyncIdFormatGroup, _
    replicaId As SyncId, _
    customItemFieldSchemas As IEnumerable(Of FieldSchema), _
    customIndexedFieldSchemas As IEnumerable(Of IndexSchema) _
) As ReplicaMetadata
‘사용 방법
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

매개 변수

  • idFormats
    공급자에 대한 ID 형식 스키마입니다.
  • replicaId
    이 메타데이터와 연결된 복제본 ID입니다.
  • customItemFieldSchemas
    각 메타데이터 항목에 대한 사용자 지정 메타데이터 필드의 스키마 정보 컬렉션입니다. 사용자 지정 메타데이터 필드가 없으면 null 참조(Visual Basic에서는 Nothing)이 될 수 있습니다.
  • customIndexedFieldSchemas
    메타데이터 저장소에 있는 항목을 보다 효율적으로 찾기 위해 사용할 수 있는 인덱스 스키마 목록입니다. 사용자 지정 인덱스가 없을 경우 null 참조(Visual Basic에서는 Nothing)일 수 있습니다.

반환 값

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

예외

예외 형식 조건

ObjectDisposedException

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

ArgumentNullException

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

ArgumentException

customItemFieldSchemas에 있는 사용자 지정 필드 이름의 길이가 0입니다.

NullReferenceException

customItemFieldSchemas에 있는 사용자 지정 필드 이름이 null 참조(Visual Basic에서는 Nothing)입니다.

MetadataFieldNotFoundException

customIndexedFieldSchemas에 있는 필드가 customItemFieldSchemas에 없습니다.

SyncIdFormatMismatchException

replicaId의 형식이 idFormats에서 지정된 형식과 일치하지 않습니다.

ArgumentOutOfRangeException

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

InvalidOperationException

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

ReplicaMetadataAlreadyExistsException

지정된 replicaId에 대한 메타데이터 저장소에 복제본 메타데이터가 이미 있습니다.

주의

이 메서드는 메타데이터 저장소에 새 복제본 메타데이터 집합을 만드는 데 사용됩니다. 메타데이터 저장소의 기존 복제본 메타데이터에 액세스하려면 GetReplicaMetadata를 사용합니다.

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

customItemFieldSchemas를 사용하여 항목 메타데이터에 대한 사용자 지정 필드 집합을 정의할 수 있습니다. 각 필드는 고유 문자열 이름 및 값으로 구성되어 있습니다. 이러한 필드는 기본 항목 메타데이터 집합에서 지원하지 않는 항목에 대한 추가 메타데이터를 저장할 수 있습니다. 이 필드는 ItemMetadata에 있는 ItemMetadata.GetByteField 또는 Microsoft.Synchronization.MetadataStorage.ItemMetadata.SetCustomField와 같은 다양한 메서드를 통해 액세스할 수 있습니다.

사용자 지정 필드 집합을 메타데이터 저장소의 항목을 효율적으로 찾기 위한 인덱스로 사용할 수 있도록 customIndexedFieldSchemas를 사용하여 인덱스 스키마 집합을 정의할 수 있습니다. 인덱스 스키마를 고유한 것으로 정의하여 해당 인덱스가 항목 하나를 정의하도록 할 수 있습니다. 인덱스 스키마에 포함된 각 필드는 복제본에 대해 정의된 사용자 지정 필드 스키마에도 있어야 합니다. 인덱스 필드는 ReplicaMetadata.FindItemMetadataByIndexedFieldReplicaMetadata.FindItemMetadataByUniqueIndexedFields와 같은 메서드에 사용할 수 있습니다.

예제

다음 예제에서는 복제본 메타데이터가 없는 경우 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 네임스페이스