Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查Sync Framework是否已使用uu sysTrackingContext设置了表? 问题_C#_Microsoft Sync Framework - Fatal编程技术网

C# 检查Sync Framework是否已使用uu 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

我们如何以编程方式检查同步框架是否已经设置了表?也就是说,我们如何检测表是否已经有了u sysTrackingContext列?以下是我正在考虑的一些方法

现在我收到了这个错误

{"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();
    }
}