MS Sync Framework和SQL Server Compact

时间:2016-09-18 20:03:59

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

我开发了一个可以在线和离线模式下运行的Windows C#应用程序 在联机模式下,它连接到SQL Server。在脱机模式下,它连接到本地数据库。

我使用Microsoft Sync Framework 2.1按需同步2个数据库。

到目前为止,我使用SQL Server的LocalDB实例作为本地数据库。但是在我的应用程序的安装过程中自动设置系统是一件痛苦的事。所以我选择使用SQL Server Compact 3.5或4.0,它非常容易分发(只有一个文件)。

但我甚至无法编译Compact DB的配置代码:

DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("MyScope");
SqlCeConnection clientConn = new SqlCeConnection(OfflineConnectionString);
var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc);
clientProvision.Apply();
我之前使用的

(没有Ce类)但SqlCeSyncScopeProvisioning无法解析。

这里有些非常错误。
如何同步我的CompactDB以将其作为我的本地数据库进行分发?

1 个答案:

答案 0 :(得分:7)

首先确保您已成功安装sdk

在此之后,请确保添加了以下参考:

  • Microsoft.Synchronization.Data.dll,

  • Microsoft.Synchronization.Data.Server.dll

  • Microsoft.Synchronization.Data.SqlServer.dll
  • Microsoft.Synchronization.Data.SqlServerCe.dll

同样在我的情况下,它可以添加

  • System.Data.SqlServerCe - 4.0

修改

根据您的评论,如果您使用SQL Server CE 4,则

我现在尝试使用SQL Server CE 3.5,实际上我可以重现您的问题。

切换到SQL Server CE 4.0修复它。

ExampleTable 4.0

Table

<强> TestCode

 var scopeDesc = new DbSyncScopeDescription("MyScope");
 var tbl = new DbSyncTableDescription("TestTable");
 var pkColumn = new DbSyncColumnDescription("Id", "int");
 pkColumn.IsPrimaryKey = true;
 tbl.Columns.Add(pkColumn);
 tbl.Columns.Add(new DbSyncColumnDescription("Name", "nvarchar(254)"));
 scopeDesc.Tables.Add(tbl);
 var clientConn = new SqlCeConnection(@"Data Source=test.sdf;Persist Security Info=False;");
 var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc);
 clientProvision.Apply();

<强>结果

一切都汇编得很好。执行上述步骤后,您应该可以轻松地将代码迁移到SQL Server CE