Microsoft sync framework 如何在资源调配期间更改客户端架构?
我急于(从来不是一件好事)启动同步框架并在项目的“离线支持”截止日期前运行。我们在服务器上有一个SQLExpress 2008实例,然后将SQLCE部署到客户端。客户端将只与服务器同步,而不进行对等同步 到目前为止,我有以下工作:Microsoft sync framework 如何在资源调配期间更改客户端架构?,microsoft-sync-framework,Microsoft Sync Framework,我急于(从来不是一件好事)启动同步框架并在项目的“离线支持”截止日期前运行。我们在服务器上有一个SQLExpress 2008实例,然后将SQLCE部署到客户端。客户端将只与服务器同步,而不进行对等同步 到目前为止,我有以下工作: 服务器架构设置 创建和测试范围 服务器配置 客户端配置,带表创建 这一切的相对简单给我留下了深刻的印象。然后我意识到: 通过客户端配置到SQLCE创建的架构不会为uniqueidentifier类型设置默认值 未在客户端上创建FK约束 下面是用于创建客户机模式的代
- 通过客户端配置到SQLCE创建的架构不会为uniqueidentifier类型设置默认值
- 未在客户端上创建FK约束
您如何建议我在设置期间对客户端CE架构进行架构更改?SqlCeSyncProvider和SqlCeClientSyncProvider是不同的 后者通常被称为脱机提供程序,它是VisualStudio中本地数据库缓存项目项使用的提供程序。此提供程序与DbServerSyncProvider和SyncAgent配合使用,并在中心辐射拓扑中使用 您正在使用的提供者称为协作提供者或对等提供者(也适用于中心辐射场景)。SqlCeSyncProvider与SqlSyncProvider和SyncOrchestrator配合使用,没有相应的Visual Studio工具支持 这两个提供程序都需要设置参与的数据库 这两种类型的提供程序以不同的方式提供跟踪和应用更改所需的同步对象。SchemaCreated事件仅适用于脱机提供程序。此get在第一次启动同步时以及框架检测到客户端数据库尚未设置(创建用户表和相应的同步框架对象)时触发
其他提供程序使用的范围设置不应用PK以外的约束。因此,您必须在设置后执行一个步骤,以便自己在框架之外应用默认值和约束。SqlCeSyncProvider和SqlCeClientSyncProvider是不同的 后者通常被称为脱机提供程序,它是VisualStudio中本地数据库缓存项目项使用的提供程序。此提供程序与DbServerSyncProvider和SyncAgent配合使用,并在中心辐射拓扑中使用 您正在使用的提供者称为协作提供者或对等提供者(也适用于中心辐射场景)。SqlCeSyncProvider与SqlSyncProvider和SyncOrchestrator配合使用,没有相应的Visual Studio工具支持 这两个提供程序都需要设置参与的数据库 这两种类型的提供程序以不同的方式提供跟踪和应用更改所需的同步对象。SchemaCreated事件仅适用于脱机提供程序。此get在第一次启动同步时以及框架检测到客户端数据库尚未设置(创建用户表和相应的同步框架对象)时触发
其他提供程序使用的范围设置不应用PK以外的约束。因此,您必须在设置后执行一个步骤,以便自己在框架之外应用默认值和约束。在不使用SyncAgent的情况下研究解决方案时,我发现以下方法也可行(除了上面我评论的解决方案外):
在不使用SyncAgent的情况下研究解决方案时,我发现以下方法也适用(除了上面我评论的解决方案外):
我发现SyncAgent的示例令人望而生畏,它似乎需要大量的适配器代码。由于时间紧迫,我最终使用了协作方法,但手动(从脚本)创建了客户机模式。这让我可以设置默认值和约束,然后设置客户端,但跳过了用户模式。不太完美,但让我振作起来。例子
static void Provision()
{
SqlConnection serverConn = new SqlConnection(
"Data Source=xxxxx, xxxx; Database=xxxxxx; " +
"Integrated Security=False; Password=xxxxxx; User ID=xxxxx;");
// create a connection to the SyncCompactDB database
SqlCeConnection clientConn = new SqlCeConnection(
@"Data Source='C:\SyncSQLServerAndSQLCompact\xxxxx.sdf'");
// get the description of the scope from the SyncDB server database
DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(
ScopeNames.Main, serverConn);
// create CE provisioning object based on the scope
SqlCeSyncScopeProvisioning clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc);
clientProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
// starts the provisioning process
clientProvision.Apply();
}