我们如何以编程方式检查Sync Framework是否已经配置了一个表?也就是说,我们如何检测该表是否已经有__sysTrackingContext列?以下是我正在考虑的一些接近。
现在我收到此错误。
{"A column named '__sysTrackingContext' already belongs to this DataTable."}
所以,我可以捕获该错误,并在catch块中调用SqlSyncScopeProvisioning.SetCreateTrackingTableDefault(DbSyncCreationOption.Skip);
,然后继续照常。
另一种方法是查询数据库中的表,然后检查它是否具有__sysTrackingContext列。
但我的感觉是,Sync Framework有一个方法。可以?如果是这样,那个方法是什么?我正在寻找这样的东西:
bool isProvisioned = SqlSyncScopeProvisioning.TableIsProvisioned("tblMyTable");
private DbSyncScopeDescription DescribeTheScope(
IEnumerable<string> tablesToSync,
string scopeName,
SqlCeConnection conn)
{
// create a scope description object
var scopeDesc = new DbSyncScopeDescription { ScopeName = scopeName };
// add each table to the scope without any filtering
foreach (var tableDesc in tablesToSync.Select(
tableName =>
SqlCeSyncDescriptionBuilder.GetDescriptionForTable(tableName, conn)))
{
scopeDesc.Tables.Add(tableDesc);
}
return scopeDesc;
}
private void ProvisionNode(
string scopeName,
string[] tablesToSync,
SqlCeConnection conn)
{
var ceConfig = new SqlCeSyncScopeProvisioning(conn);
if (!ceConfig.ScopeExists(scopeName))
{
DbSyncScopeDescription scopeDesc =
DescribeTheScope(tablesToSync, scopeName, conn);
ceConfig.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
ceConfig.PopulateFromScopeDescription(scopeDesc);
ceConfig.Apply();
}
}