Sync Framework 2.1 を使用しています。競合処理を実装していますが、それが機能しない理由がわかりません:
これが私の競合処理コードです:
public void OnErrorOccured(DbApplyChangeFailedEventArgs e)
{
if (e.Conflict.Type == DbConflictType.LocalUpdateRemoteUpdate)
{
int remoteValue = (int)e.Conflict.RemoteChange.Rows[0][e.Conflict.RemoteChange.Columns["MyValue"]];
int localValue = (int)e.Conflict.LocalChange.Rows[0][e.Conflict.LocalChange.Columns["MyValue"]];
if (remoteValue > localValue)
{
// Overwrite only MyValue column
e.Conflict.LocalChange.Rows[0][e.Conflict.LocalChange.Columns["MyValue"]] = remoteValue;
e.Action = ApplyAction.RetryApplyingRow; // Retry with new changes
// Same conflict will be raised again and again and again
}
else
{
// Overwrite entire local record
e.Action = ApplyAction.RetryWithForceWrite;
// The else is working properly
}
}
}
また、e.Conflict.RemoteChange を e.Conflict.LocalChange に等しくして、すべての値を両方の DataTable にマージしようとしました。
// Overwrite only MyValue column
e.Conflict.LocalChange.Rows[0][e.Conflict.LocalChange.Columns["MyValue"]] = remoteValue;
// Copy rest of all columns
e.Conflict.RemoteChange.Rows[0][1] = e.Conflict.LocalChange.Rows[0][1];
e.Conflict.RemoteChange.Rows[0][2] = e.Conflict.LocalChange.Rows[0][2];
e.Conflict.RemoteChange.Rows[0][3] = e.Conflict.LocalChange.Rows[0][3];
ボットも役に立ちません。
- コードのどこが間違っていますか?
- RetryApplyingRow を使用した良い例が見つかりません。提供できますか?
前もって感謝します!