3

ローカル サーバーとして SQL Express DB を、リモート サーバーとして SQL Server DB を使用しています。競合解決のために SyncOrchestrator 同期エージェントを使用しています。競合がある場合はいつでも保存したいので、後ですべての競合を取得して1つずつ解決します。ただし、ApplyAction 列挙には、'SkipChange' や 'Defer' のような値はありません。

ガイドしてください。

コードを以下に貼り付けます。

private void btnSync_Click(object sender, RoutedEventArgs e) { SqlConnection clientConn = new SqlConnection(connectionstring1);

        SqlConnection serverConn = new SqlConnection(connectionstring2);

        // create the sync orhcestrator
        SyncOrchestrator syncOrchestrator = new SyncOrchestrator();


        SqlSyncProvider localProvider = new SqlSyncProvider("Scope1", clientConn);
        SqlSyncProvider remoteProvider = new SqlSyncProvider("Scope2", serverConn);

        // set local provider of orchestrator to a sync provider associated with the 
        // ProductsScope in the SyncExpressDB express client database
        syncOrchestrator.LocalProvider = localProvider;

        // set the remote provider of orchestrator to a server sync provider associated with
        // the ProductsScope in the SyncDB server database
        syncOrchestrator.RemoteProvider = remoteProvider;

        // set the direction of sync session to Upload and Download
        syncOrchestrator.Direction = SyncDirectionOrder.DownloadAndUpload;

        // subscribe for errors that occur when applying changes to the client
        ((SqlSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed);

        // execute the synchronization process
 SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();             

        MessageBox.Show("Synchronization of Table1 Completed");

        BindClientTables();
        BindServerTables();
        }

    private void btnServerData_Click(object sender, RoutedEventArgs e)
        {
        BindServerTables();
        }

    private void btnClientData_Click(object sender, RoutedEventArgs e)
        {
        BindClientTables();
        }

    static void Program_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
        {
        "**Here I want to defer the Resolution for future.**"
        }
4

1 に答える 1

0

スキップしたい場合は、アクションとして RetryNextSync を指定する必要があります ...

解決をそれほど長く延期しないことをお勧めします...延期してユーザーが行を更新し続けると、競合が発生したときに保存した行は、それらをループして解決するまでにすでに変更されています競合...

于 2012-12-12T14:02:14.667 に答える