我急于(从来不是一件好事)让Sync Framework启动并运行我的项目的“离线支持”截止日期。我们的服务器上有一个SQL Express 2008实例,然后将SQLCE部署到客户端。客户端只与服务器同步,没有点对点。
到目前为止,我有以下工作:
我对所有这些相对简单的印象非常深刻。然后我意识到以下几点:
以下是用于创建客户端架构的代码(从我在网上找到的示例中提取)
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();
}
当Sync Framework在客户端上创建架构时,我需要进行前面列出的其他更改(默认值,约束等)。
这是我感到困惑(和沮丧)的地方: 我遇到了code example,它显示了一个具有CreatingSchema事件的SqlCeClientSyncProvider。这个代码示例实际上显示了在列上设置RowGuid属性,这完全是我需要做的。但是,什么是SqlCeClientSyncProvider?!整个时间(现在4天)我一直在使用同步代码中的SqlCeSyncProvider。那么有一个SqlCeSyncProvider和一个SqlCeClientSyncProvider?
MSDN上的文档在解释其中任何一个方面都不是很好。
我进一步混淆了是否应该在配置时或同步时进行架构更改?
您如何建议我在配置期间对客户端CE架构进行架构更改?
答案 0 :(得分:3)
SqlCeSyncProvider与SqlCeClientSyncProvider不同。
后者通常被称为脱机提供程序,它是Visual Studio中本地数据库缓存项目项使用的提供程序。此提供程序与DbServerSyncProvider和SyncAgent配合使用,用于中心辐射拓扑。
您正在使用的那个称为协作提供程序或对等提供程序(它也适用于中心辐射方案)。 SqlCeSyncProvider与SqlSyncProvider和SyncOrchestrator一起使用,没有相应的Visual Studio工具支持。
两家提供商都要求配置参与的数据库。
这两种类型的提供程序以不同方式配置跟踪和应用更改所需的同步对象。 SchemaCreated事件仅适用于脱机提供程序。第一次启动同步以及框架检测到尚未配置客户端数据库(创建用户表和相应的同步框架对象)时,会触发此get。
其他提供商使用的范围配置不应用PK以外的约束。所以你必须做一个后配置步骤,在框架之外自己应用默认值和约束。
答案 1 :(得分:1)
在不使用SyncAgent的情况下研究解决方案时,我发现以下内容也适用(除了上面的评论解决方案):