Sync Frameworkの使い方(SQL Server Compact Edition 3.5編)

SQL Server Compact Edition 3.5のデータベース間でのSync Frameworkを使ったデータ同期方法について説明します。

トランザクションのあまりないようなアプリケーションで、データの多重化をさせたいような場合に有効なソリューションだと思っています。

参照が必要なアセンブリ

Sync Framework 2.1を使用します。以下のPathはx64の場合です。

  • C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\x86\Microsoft.Synchronization.dll
  • C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x86\Microsoft.Synchronization.Data.dll
  • C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x86\Microsoft.Synchronization.Data.SqlServerCe.dll

SQL Sever CEで必要な参照アセンブリは以下の通りです。

  • C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Desktop\System.Data.SqlServerCe.dll

基本的にVisual Studioを使う場合には、Visual Studioの参照の追加で出てくるリストにあるはずですが、無ければパスで指定してください。

名前空間

Sync Frameworkの名前空間は以下になります。

  • using Microsoft.Synchronization
  • using Microsoft.Synchronization.Data
  • using Microsoft.Synchronization.Data.SqlServerCe

作業の流れ

作業は以下のような流れになります。

  1. ローカル、リモートそれぞれのデータベースへのConnectionオブジェクトを作る。
  2. ローカル、リモートそれぞれのSyncProviderを作成する。
  3. 新しいスコープ詳細の作成と、データベースに対してそのスコープに対応する同期作業用テーブルの追加を行う
  4. SqlCeSyncProviderオブジェクトを利用してRelationalSyncProviderオブジェクトを作成する。
  5. SyncOrchestratorを作成する。
  6. データの同期を実行する。

Connectionオブジェクトの作成

次のようにsdfファイルへのフルパスをDataSourceに指定してConnectionオブジェクトを作成します。

SyncProviderの作成

今作ったConnectionオブジェクトを使ったSyncProviderを作成します。

同期のための準備

同期をさせるために新しいスコープ詳細の作成とそのスコープに対応するテーブルの追加を行います。

Sync Frameworkは同期に必要な情報を保存するため、同期対象となっているデータベースにテーブルをに追加する必要があり、この関数ではその処理を行っています。このテーブルは一度作ればいいので、11行目ですでにそれらのテーブルが存在しているかを確認しています。

RelationalSyncProviderオブジェクトを作成する。

RelationalSyncProviderは同期エージェントに対してデータベース固有の特徴を抽象化して、データベース特定の実装が覆い隠します。

SyncOrchestratorを作成する

SyncOrchestratorを作成し、必要な設定をします。

同期を実行する

同期を実行させます。OrchestratorのSynchronizeメソッドを呼び出すことで同期を実行させ、結果をSyncOperationStatisticsとして返します。コード例にはありませんが、SyncOperationStatisticsには同期実行での統計情報が含まれているので、ユーザーに対して必要な情報表示させたり出来ます。

全体コード

Log.cs

Program.cs

コードダウンロード

Visual Studio 2010のプロジェクトととなっています。

CC BY-SA 4.0 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

No Code, No Life.

%d人のブロガーが「いいね」をつけました。