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
我开发了一个 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