2

我正在使用Sync Framework来同步两个Sql Server数据库。

当检测到一些冲突时,我会捕获事件并执行一些逻辑来解决它,但我无法获取冲突的行数据。

所以我的问题是,我怎样才能获得即将同步的行中的特定冲突数据?

以下代码说明了我在做什么:

if (e.Conflict.Type == DbConflictType.LocalInsertRemoteInsert)
{
     DataTable conflictingRemoteChange = e.Conflict.RemoteChange;
}
4

1 回答 1

0

ApplyChangeFailed事件由 引发时SqlSyncProvider,您使用DbApplyChangeFailedEventArgs提供有关导致失败的错误或冲突的信息的对象。该e.conflict属性还包含:

  • RemoteChange:DataTable从远程数据库中获取包含冲突行的对象。
  • LocalChange:DataTable从本地数据库中获取包含冲突行的对象。

这些表中的每一个最多包含一行,表示冲突的行。

Datarow drRemote = e.Conflict.RemoteChange.Rows[0];
Datarow drLocal = e.Conflict.LocalChange.Rows[0];

要获得该行中冲突的特定值,恐怕没有其他方法可以手动比较DataRows 中的每个值。

编辑:@JuneT 说得比我好;-)

您只能获取冲突的行。它不会告诉您哪些列存在冲突。同步框架更改跟踪在行级别。它只是记录一行发生了变化,而不关心发生了什么变化。

于 2013-09-08T15:25:22.050 回答