GetReplicaMetadata メソッド

メタデータ ストア内のレプリカ メタデータにアクセスするために使用されるレプリカ メタデータ オブジェクトを取得します。

名前空間:  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
abstract GetReplicaMetadata : 
        idFormats:SyncIdFormatGroup * 
        replicaId:SyncId -> ReplicaMetadata 
override GetReplicaMetadata : 
        idFormats:SyncIdFormatGroup * 
        replicaId:SyncId -> ReplicaMetadata 
public override function GetReplicaMetadata(
    idFormats : SyncIdFormatGroup, 
    replicaId : SyncId
) : ReplicaMetadata

パラメーター

戻り値

型 : Microsoft.Synchronization.MetadataStorage. . :: . .ReplicaMetadata
メタデータ ストア内のレプリカ メタデータにアクセスするために使用されるレプリカ メタデータ オブジェクトです。

例外

例外 条件
ObjectDisposedException

このオブジェクトが破棄されているか、正しく初期化されていません。

ArgumentNullException

idFormats または replicaId が null Nothing nullptr unit NULL 参照 (Visual Basic では Nothing) です。

SyncIdFormatMismatchException

replicaId の形式が、idFormats で指定された形式と一致しないか、idFormats が、レプリカ メタデータを初期化したときに使用された ID 形式スキーマと一致しません。

ArgumentOutOfRangeException

idFormats によって指定された ID の長さが 8,000 バイトを超えています。

InvalidOperationException

メタデータ ストアが開かれていないか、作成されていません。

ReplicaMetadataInUseException

このレプリカ メタデータ オブジェクトのインスタンスが既にアクティブです。

ReplicaMetadataNotFoundException

ID が replicaId であるレプリカ メタデータが見つかりませんでした。

説明

このメソッドは、メタデータ ストアに既に存在するレプリカ メタデータにアクセスするために使用されます。メタデータ ストアで新規のレプリカ メタデータを作成するには、InitializeReplicaMetadata を使用します。

このメソッドは、Metadata Storage Services に用意された 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 名前空間