MS 同步框架和 SQL 服务器紧凑型

MS Sync Framework and SQL Server Compact

我开发了一个 Windows C# 应用程序,它可以在在线和离线模式下工作。
在在线模式下,它连接到 SQL 服务器。在离线模式下,它连接到本地数据库。

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

到目前为止,我使用 SQL Server 的 LocalDB 实例作为本地数据库。但是在我的应用程序安装过程中自动设置系统是一件很痛苦的事情。所以我 tought 使用 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 以将其作为我的本地数据库分发?

首先确保你已经成功安装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 修复了它。

示例表 4.0

测试代码

 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