スナップショット、ダウンロード、アップロード、および双方向の各同期を指定する方法
Sync Framework では、スナップショット、ダウンロード、アップロード、および双方向の各同期がサポートされています。Sync Framework には、各テーブルに対して異なる種類の同期を指定できる柔軟性があります。詳細については、「クライアントとサーバーの同期のアーキテクチャとクラス」を参照してください。
このトピックでは、各種の同期に必要なプロパティの概要を説明します。このセクションの各トピックでは、同期の種類を構成する方法について説明し、コード例を示します。
このセクションの内容
同期の方向を決定するプロパティ
テーブルに使用される同期の種類は、SyncAdapter に設定した同期コマンドと、SyncTable の SyncDirection プロパティによって決まります。同期コマンドによって、同期できるデータが決定され、SyncDirection プロパティによって、特定のセッションで実際に同期されるデータが決定されます。多くの場合、これらのデータは同じになります。たとえば、双方向同期とそれをサポートするコマンドを指定します。ただし、場合によっては、一方向のみで同期する必要があります。たとえば、販売員は製品データに対してダウンロードのみのアクセス権が必要ですが、マネージャーはこのデータをリモートで更新できることも必要な場合があります。双方向同期には SyncAdapter コマンドを指定できますが、販売員のダウンロードのみには、SyncDirection プロパティを設定します。
同期の方向を指定するには、SyncDirection プロパティを、SyncDirection 列挙体の次のいずれかの値に設定します。
次に、各テーブルで、SyncAdapter に手動で一連のコマンドを指定するか、SqlSyncAdapterBuilder を使用してこのコマンドを生成します。ダウンロードのみの同期および双方向同期では、データの増分変更が追跡されるように、サーバーを構成する必要もあります。詳細については、「サーバー データベースの変更の追跡」を参照してください。
コマンドを手動で作成する場合は、SyncAdapter で次の一部またはすべてのプロパティを設定します。
SelectIncrementalInsertsCommand。このプロパティは、すべての種類の同期で使用されます。このプロパティは、スナップショット、ダウンロードのみ、および双方向の各同期の最初の挿入と、ダウンロードのみの同期と双方向同期の増分挿入を、サーバー データベースから取得するコマンドを指定します。既定では、このコマンドは、すべての種類の同期で、サーバー データベースからテーブル スキーマも取得します。スキーマの作成および挿入は、SqlCeClientSyncProvider によってクライアントに適用されます。
SelectIncrementalUpdatesCommand および SelectIncrementalDeletesCommand。これらのプロパティは、ダウンロードのみの同期と双方向同期で使用されます。このプロパティは、SqlCeClientSyncProvider によってクライアントに適用できるようにサーバーで更新と削除を取得するコマンドを指定します。
InsertCommand、UpdateCommand、および DeleteCommand。これらのプロパティは、アップロードのみの同期と双方向同期で使用されます。このプロパティは、クライアントで行われた挿入、更新、および削除をサーバーに適用するコマンドを指定します。
SelectConflictUpdatedRowsCommand および SelectConflictDeletedRowsCommand。これらのプロパティは、通常、双方向同期で使用されます。このプロパティは、サーバーでの更新および削除の競合を取得するコマンドを指定します。詳細については、「データの競合とエラーを処理する方法」を参照してください。
同期コマンドを手動で指定する利点の 1 つに、コマンドと、クライアントからアップロードされる変更の種類をより細かく制御できる点があります。たとえば、双方向同期を実行する際にクライアントから削除をアップロードしない場合は、DeleteCommand プロパティにコマンドを指定しません。SqlSyncAdapterBuilder によって生成されるコマンドより複雑な手動で作成したコマンドの例については、「データの競合とエラーを処理する方法」を参照してください。
SqlSyncAdapterBuilder でコマンドを生成する場合は、SyncDirection プロパティを設定します。このプロパティによって、テーブルに生成する SyncAdapter コマンドが決まります。スナップショット同期またはアップロードのみの同期で必要な設定はこれだけです。ダウンロードのみの同期および双方向同期では、変更追跡に使用するサーバーの列を指定するプロパティや、データをフィルター選択する必要があるかどうかを指定するプロパティも設定する必要があります。設定する必要があるプロパティは次のとおりです。
これらのプロパティに指定された列およびフィルター値に基づいて、SqlSyncAdapterBuilder は適切なコマンドを生成します。
同期の方向の変更
テーブルが同期された後、別の同期の方向を指定できます。ただし、スナップショット同期では、クライアント データベースの変更追跡を有効にすることはできません。ある時点でアプリケーションによってデータの変更追跡が要求されることが予想される場合は、スナップショット同期を構成しないことをお勧めします。スナップショット同期を構成した後に、別の種類の同期に変更する場合は、変更追跡に関連する次の問題に注意する必要があります。
スナップショット同期を構成してからダウンロードのみの同期または双方向同期に変更する場合 :
サーバー側の行が選択され、再度ダウンロードされる場合があります。これにより、ダウンロード フェーズで競合が発生する可能性があります。
スナップショット同期を構成した後、クライアント データベースで変更を行ってから、アップロードのみの同期または双方向同期に変更する場合 :
クライアント データベースで行われた変更はアップロードされません。変更をアップロードする必要がある場合は、変更された各行のダミー更新を実行する必要があります。
スナップショット同期を構成した後、アップロードのみの同期または双方向同期に変更してから、クライアント データベースで変更を行う場合 :
アップロード フェーズで競合が発生する場合があります。