技术开发 频道

处理微软MSF同步框架中的数据冲突

    除上面描述的冲突类型外,MSF还定义了三个内置的行为来解决冲突,它们定义在ApplyAction枚举量中:

    ◆ Continue 这是默认的行为,它允许你继续到列表中下一个冲突。

    ◆ RetryApplyingRow 将会重新尝试应用对行的修改,除非你使用某种方法修改了数据,否则就会失败(通常是在代码中使用自定义的冲突解决方案,匹配业务逻辑解决冲突)。

    ◆ RetryWithForceWrite 将会强制应用程序修改行(覆盖任何冲突的数据)。

    在接下来的内容中,我们将会看到这些行为对某些冲突类型的处理结果。

    使用ApplyChangeFailed解决冲突

    知道冲突类型很重要,但你也需要知道是哪一行发生了冲突,MSF在DbServerSyncProvider和SqlCeClientSyncProvider上都提供了ApplyChangeFailed事件,允许你审查冲突信息,然后决定如何处理。在服务器和客户端SyncProvider上都有可能引发事件,取决于同步的阶段,ApplyChangeFailedEventArgs对象具有Action和Conflict属性,Action属性用于解决冲突,只要将其设为前一小节描述的ApplyAction类型的一个值即可;Conflict属性描述了更详细的冲突信息,如它的类型和发生冲突的行。

    ApplyChangeFailedEventArgs对象还有一个Context属性,它允许你修改正在同步的数据,你可以使用它创建自己的冲突解决方案,这样你在处理复杂数据冲突时可以更加得心应手。

    我们来看一些例子吧,我们创建了一个项目,显示一个跟踪顾客喜欢的数字的表,窗体的上半部分显示了服务端数据拷贝,窗体的下半部分显示了客户端缓存中的数据拷贝,我们可以修改任何一半的数据,然后保存数据到服务器和客户端,接着尝试同步数据,如果遇到数据冲突,会显示一个自定义窗体,让我们选择一个ApplyAction类型来解决冲突。

 

图- 2 冲突解决方案示例窗体
0
相关文章