检查Sync Framework是否已使用__sysTrackingContext配置了表?

时间:2014-03-27 00:27:18

标签: c# microsoft-sync-framework

问题

我们如何以编程方式检查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();
    }
}

0 个答案:

没有答案