ReplicaMetadata.GetLocalVersions 方法

当在派生类中重写时,获取包含存储于此副本中的项和变更单位的版本的变更批。这些项和变更单位与从另一个提供程序发送的变更批中所引用的项和变更单位相对应。

命名空间: Microsoft.Synchronization.MetadataStorage
程序集: Microsoft.Synchronization.MetadataStorage(在 microsoft.synchronization.metadatastorage.dll 中)

语法

声明
Public MustOverride Function GetLocalVersions ( _
    sourceChanges As ChangeBatch _
) As IEnumerable(Of ItemChange)
用法
Dim instance As ReplicaMetadata
Dim sourceChanges As ChangeBatch
Dim returnValue As IEnumerable(Of ItemChange)

returnValue = instance.GetLocalVersions(sourceChanges)
public abstract IEnumerable<ItemChange> GetLocalVersions (
    ChangeBatch sourceChanges
)
public:
virtual IEnumerable<ItemChange^>^ GetLocalVersions (
    ChangeBatch^ sourceChanges
) abstract
public abstract IEnumerable<ItemChange> GetLocalVersions (
    ChangeBatch sourceChanges
)
public abstract function GetLocalVersions (
    sourceChanges : ChangeBatch
) : IEnumerable<ItemChange>

参数

  • sourceChanges
    从另一个提供程序发送且要应用到与此副本相关联的项存储区的变更批。

返回值

包含存储于此副本中的项和变更单位的版本的变更批,该副本与从其他提供程序发送的变更批中所引用的项和变更单位相对应。

异常

异常类型 条件

ObjectDisposedException

对象已释放或未正确初始化。

ArgumentNullException

sourceChanges 为 null 引用(在 Visual Basic 中为 Nothing)。

备注

此方法可帮助同步提供程序实现其 ProcessChangeBatch 方法。

变更应用方使用从此方法返回的变更批中的版本来进行冲突检测。

实施者注意事项: 从此方法返回的变更批必须针对 sourceChanges 中的每个条目(包括变更单位条目)包含一个条目。如果某个项存在于项存储区中,则该项的条目必须包含其针对此副本的版本信息。如果某项不存在,则必须将其版本设置为 SyncVersion.UnknownVersion,并且其 ItemChange.ChangeKind 属性必须设置为 UnknownItem

示例

以下示例使用 GetLocalVersions 获取源变更的目标版本,并将结果传递到 NotifyingChangeApplier.ApplyChanges,从而实现 KnowledgeSyncProvider.ProcessChangeBatch

public override void ProcessChangeBatch(ConflictResolutionPolicy resolutionPolicy, ChangeBatch sourceChanges, object changeDataRetriever, SyncCallbacks syncCallbacks, SyncSessionStatistics sessionStatistics)
{
    // Use the metadata storage service to get the local versions of changes received from the source provider.
    IEnumerable<ItemChange> localVersions = _ContactStore.ContactReplicaMetadata.GetLocalVersions(sourceChanges);

    // Use a NotifyingChangeApplier object to process the changes. Note that this object is passed as the INotifyingChangeApplierTarget
    // object that will be called to apply changes to the item store.
    NotifyingChangeApplier changeApplier = new NotifyingChangeApplier(ContactStore.ContactIdFormatGroup);
    changeApplier.ApplyChanges(resolutionPolicy, sourceChanges, (IChangeDataRetriever)changeDataRetriever,
        localVersions, _ContactStore.ContactReplicaMetadata.GetKnowledge(), 
        _ContactStore.ContactReplicaMetadata.GetForgottenKnowledge(), this, _sessionContext, syncCallbacks);
}

请参阅

参考

ReplicaMetadata 类
ReplicaMetadata 成员
Microsoft.Synchronization.MetadataStorage 命名空间