【发布时间】:2023-03-29 22:00:01
【问题描述】:
我急于(从来都不是一件好事)启动并运行 Sync Framework,以便在我的项目的“离线支持”截止日期前运行。我们的服务器上有一个 SQL Express 2008 实例,然后将 SQLCE 部署到客户端。客户端只会与服务器同步,不会点对点。
到目前为止,我有以下工作:
- 服务器架构设置
- 创建和测试范围
- 已配置服务器
- 通过创建表来配置客户端
我对所有这一切的相对简单印象深刻。然后我意识到以下几点:
- 通过客户端配置到 SQLCE 创建的架构不会为唯一标识符类型设置默认值。
- FK 约束未在客户端创建
这是用于创建客户端架构的代码(摘自我在网上某处找到的示例)
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 架构进行架构更改?
【问题讨论】: