MS Sync Framework和SQL Server Compact

jue*_*n d 12 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();
Run Code Online (Sandbox Code Playgroud)

我之前使用过(没有Ce类)但SqlCeSyncScopeProvisioning无法解决.

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

lok*_*ing 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

表

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();
Run Code Online (Sandbox Code Playgroud)

结果

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