我为POS(销售点)应用程序创建了一个同步应用程序。 一台服务器与多个终端链接。 服务器和终端数据库有[pos_terminal]表。它有[POS_TERMINAL_ID]列作为标识。 这就是我配置服务器的方式。
try
{
string strScopeName = "";
strScopeName = "TERMINAL_SCOPE_T01";
SqlConnection serverConn = new SqlConnection(strServer_Connection);
//pos_terminal
DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(strScopeName);
DbSyncTableDescription pos_terminal_Description = SqlSyncDescriptionBuilder.GetDescriptionForTable("pos_terminal", serverConn);
scopeDesc.Tables.Add(pos_terminal_Description);
SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
serverProvision.ObjectSchema = "Sync";
serverProvision.Tables["pos_terminal"].AddFilterColumn("POS_TERMINAL_ID");
serverProvision.Tables["pos_terminal"].FilterClause = "[side].[POS_TERMINAL_ID]='T01'";
if (serverProvision.ScopeExists(strScopeName))
{
return;
}
serverProvision.Apply();
MessageBox.Show("Server provisioned with scope " + strScopeName);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
及以下,我如何配置终端数据库。
try
{
string strScopeName = "";
strScopeName = "TERMINAL_SCOPE_T01";
SqlConnection clientConn = new SqlConnection(strTerimal_Connection);
SqlConnection serverConn = new SqlConnection(strServer_Connection);
DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(strScopeName, null, "Sync", serverConn);
SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc);
clientProvision.ObjectSchema = "Sync";
clientProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
if (clientProvision.ScopeExists(strScopeName))
{
return;
}
clientProvision.Apply();
MessageBox.Show("Terminal provisioned with scope " + strScopeName);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
这些都是基本过滤。
问题是,在TERMINAL 01中,当我将POS_TERMINAL_ID设置为“T01”(在过滤中)时,它运行良好,并且过滤后的数据与[pos_terminal]表同步。 但是在TERMINAL 02中,当我将POS_TERMINAL_ID设置为“T02”(在过滤中)时,数据会同步到T01,但不会与T02相关。
在TERMINAL 03中也是如此,(同步T01,但不是T03)。
我已经单独测试过,只需在2个数据库中创建2个表并测试编码。编码工作正常。 另一个表中有一个外键引用到[POS_TERMINAL_ID]。 我已将其删除,并在POS数据库中进行了测试。但没有运气。
任何人都有针对这种情况的解决方案吗?
由于
答案 0 :(得分:0)
如果要为新作用域创建新的存储过程,则应指定SetCreateProceduresForAdditionalScopeDefault。否则,新范围将只重用第一个范围中的selectchanges存储过程。
更好,使用范围模板而不是添加新的选择更改存储过程。
通过这个link来详细了解同步框架配置......