C# 检查Sync Framework是否已使用uu sysTrackingContext设置了表? 问题
我们如何以编程方式检查同步框架是否已经设置了表?也就是说,我们如何检测表是否已经有了u sysTrackingContext列?以下是我正在考虑的一些方法 现在我收到了这个错误C# 检查Sync Framework是否已使用uu sysTrackingContext设置了表? 问题,c#,microsoft-sync-framework,C#,Microsoft Sync Framework,我们如何以编程方式检查同步框架是否已经设置了表?也就是说,我们如何检测表是否已经有了u sysTrackingContext列?以下是我正在考虑的一些方法 现在我收到了这个错误 {"A column named '__sysTrackingContext' already belongs to this DataTable."} 因此,我可以捕获该错误,并在catch块中调用SqlSyncScopeProvisioning.SetCreateTrackingTableDefaultDbSync
{"A column named '__sysTrackingContext' already belongs to this DataTable."}
因此,我可以捕获该错误,并在catch块中调用SqlSyncScopeProvisioning.SetCreateTrackingTableDefaultDbSyncCreationOption.Skip;然后像往常一样继续
另一种方法是查询数据库中的表,然后检查它是否具有uu sysTrackingContext列
不过,我的感觉是,Sync框架有一种方法可以实现这一点。是吗?如果是,那是什么方法?我在找这样的东西:
bool isProvisioned=SqlSyncScopeProvisioning.tableisprovisionedtbllmytable
编辑:以下是我设置表的方式。
_sysTrackingContext仅对SQL CE数据库有效。如何设置表?如果该列被添加为最有可能通过GetDescriptionForTable进行同步的列,而不是因为某个表已被添加到某个作用域中,则会发生错误。@JuneT我在尝试解决此问题时在您的网站上。你说得对,我用的是GetDescriptionForTable。我发布了一个我正在做的代码示例。感谢您的帮助。检查您是否可以直接使用SQL CE更改跟踪API…查找SqlCeChangeTracking.GetTrackingOptions,这将告诉您是否跟踪了表
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();
}
}