单向与过滤器同步

时间:2015-01-16 15:52:49

标签: c# sql-server synchronization sql-server-ce microsoft-sync-framework

所以我有一个中央数据库(2008 R2)。从这台服务器我想将某些数据同步到用户设备(到CE 3.5数据库),这是一种单向同步,数据在设备上是只读的。假设我有一个图像相册应用程序,我希望能够将相册同步到设备。

数据库包含许多相册和图片,因此我不想将所有相册同步到用户。相反,用户选择他想要同步到他/她的设备的专辑。

数据库描述:

Database description

到目前为止,使用带有基于参数的过滤器的同步框架(2.1)并在所需相册的 NUM_ID 上配置服务器数据库可以正常工作范围。

现在在我的应用程序中,很多专辑共享图像。我希望用户能够将多个专辑下载到他们的设备上。而现在我开始遇到同步框架的问题。因此,向数据库添加另一个范围没有问题。

但是当我第二次同步到本地数据库时,它首先删除第一次同步创建的所有跟踪表。所以第二种同步类型的工作方式,就像它下载查看第二张专辑所需的数据一样。但是,它不会比较数据库中已有的任何图像,而只是下载所选相册中的所有图像。让我们说大约80%的图像是共享的,那么大部分数据都是完全没必要的。

所以我的问题是,有没有办法配置同步框架不删除跟踪表(或使其工作的东西)?

或者我应该看看除了同步框架之外的其他内容? (@EricEJ之前曾暗示过某些名为 SQL Server Merge Replication 的内容可适用于我的应用程序。)

我更喜欢使用某种框架,所以我不必在数据库中创建所有存储过程和触发器等。

以下是同步日志的一部分,这是同步第二张专辑时(即一个范围已经同步到CE数据库)。

VERBOSE, Connecting using string: Data Source=***;Initial Catalog=dt;User ID=**;Password=****
VERBOSE, Reading Schema Version Info
VERBOSE,    Executing Command: SELECT [schema_major_version], [schema_minor_version], [schema_extended_info] FROM [sync].[schema_info]
VERBOSE, Connecting using string: Data Source=***;Initial Catalog=dt;User ID=sync
INFO   , ----- Populating Scope Provisioning from Scope Description for '1027_SyncScope' -----
INFO   , Adding Table Provisioning for '[dt_album].[ALBUMS]'
INFO   , Adding Table Provisioning for '[dt_album].[ALBIMGLINKS]'
INFO   , Adding Table Provisioning for '[dt_album].[IMAGES]'
INFO   , --- END Populating Scope Provisioning from Scope Description for '1027_SyncScope' ---
VERBOSE, Connecting to database: TEstMC.sdf
VERBOSE,    Executing Command: SELECT [schema_major_version], [schema_minor_version], [schema_extended_info] FROM [schema_info]
VERBOSE, Connecting to database: TEstMC.sdf
VERBOSE, Connecting to database: TEstMC.sdf
VERBOSE,    Executing Command: SELECT [schema_major_version], [schema_minor_version], [schema_extended_info] FROM [schema_info]
VERBOSE,    Executing Command: SELECT [schema_major_version], [schema_minor_version], [schema_extended_info] FROM [schema_info]
INFO   , ----- Provisioning Scope '1027_SyncScope' on Database 'TEstMC.sdf' -----
VERBOSE,    Executing Command: SELECT [schema_major_version], [schema_minor_version], [schema_extended_info] FROM [schema_info]
INFO   , Dropping Tracking Table '[ALBUMS]'<------------------- WHY???
INFO   , Creating Tracking Table '[ALBUMS_tracking]'
VERBOSE,    Executing Command: CREATE TABLE [ALBUMS_tracking] ([NUM_ID] int NOT NULL, [sync_row_is_tombstone] int NOT NULL, [sync_update_peer_key] int NOT NULL, [sync_update_peer_timestamp] bigint NOT NULL, [sync_create_peer_key] int NOT NULL, [sync_create_peer_timestamp] bigint NOT NULL, [sync_update_bsn] bigint DEFAULT 0 NOT NULL, [last_change_datetime] datetime DEFAULT GETDATE() NULL)
VERBOSE,    Executing Command: ALTER TABLE [ALBUMS_tracking] ADD CONSTRAINT [PK_ALBUMS_tracking] PRIMARY KEY ([NUM_ID])
INFO   , Adding Change Tracking index to Tracking Table '[ALBUMS_tracking]'
VERBOSE,    Executing Command: CREATE INDEX sysChangeTxBsn_idx ON [ALBUMS_tracking] (sync_update_bsn);
VERBOSE,    Executing Command: SELECT [schema_major_version], [schema_minor_version], [schema_extended_info] FROM [schema_info]

... (same for all other tables in scope (repeted from "Dropping Tracking Table..."))

INFO   , Deleting Scope Info entry '1027_SyncScope'
VERBOSE,    Executing Command: DELETE [scope_info] WHERE [sync_scope_name] = @scopeName
VERBOSE,       Parameter: @scopeName Len: 14 Value: 1027_SyncScope
INFO   , Adding Scope Info entry for '1027_SyncScope'
INFO   ,    UserComment: 
VERBOSE,    Executing Command: INSERT INTO [scope_info] ([sync_scope_name], [scope_config_id], [scope_timestamp], [scope_user_comment]) VALUES (@scopeName, @configId , 1, @userDesc)
VERBOSE,       Parameter: @scopeName Len: 14 Value: 1027_SyncScope
VERBOSE,       Parameter: @configId Value: b8568957-a533-4a85-9cb6-d49be9012ef5
VERBOSE,       Parameter: @userDesc Value: 
INFO   , Adding Scope Config Entry for config id 'b8568957-a533-4a85-9cb6-d49be9012ef5'
VERBOSE,    Executing Command: INSERT INTO [scope_config] ([config_id], [config_data]) VALUES (@configId, @configData)
VERBOSE,       Parameter: @configId Value: b8568957-a533-4a85-9cb6-d49be9012ef5
VERBOSE,       Parameter: @configData Len: 8177 Value: <SqlCeSyncProviderScopeConfiguration xmlns:xsi="ht...
INFO   , --- END Provisioning Scope '1027_SyncScope' on Database 'TEstMC.sdf' ---

然后同步开始

Here is a GIST with the code.

0 个答案:

没有答案