获取有关架构更改的信息

时间:2013-09-16 13:38:42

标签: .net synchronization microsoft-sync-framework

我已经使用Sync framework 2.1进行了一些测试来同步两个数据库, 但是当我改变数据库的架构时,我一直有些麻烦。

我的情景是:

  1. 两个sql server数据库同步并具有相同的架构。

  2. 我在远程数据库的某个表中添加了一个新列

  3. 重新配置远程数据库

  4. 尝试再次同步。

  5. 在步骤4中,我得到一个异常表示我在远程Db处有一个新列,并且该列不存在于本地Db。

    所以,我想要做的是获取有关该新列的信息,例如:Column Name,包含Column的Table和Column的数据类型。 为了在本地数据库中添加新列。

    有谁知道如何获取这些信息?

2 个答案:

答案 0 :(得分:1)

同步Fx不会跟踪和同步架构更改。如果您在远程数据库上添加了一列并重新配置它,请不要指望目标数据库实际接收新的表和范围定义。

框架对架构的唯一了解就是您在配置期间告诉它的内容。配置后发生在您的模式中的任何内容都不会反映在范围定义中。

您可以使用Mahesh上面提到的方法比较源和目标之间的表模式,获取表描述并比较它们(例如,源中的哪个列不在目标中)。

然后您可以取消配置和重新配置范围。

但随后引入了另一个问题,您的源数据库和目标数据库已包含数据。所以你在第一次同步时会遇到冲突。根据行数,这将是一个慢同步。

如果您没有要同步的那么多行,那么更简单的解决方案就是简单地删除目标表并让Sync Fx使用新的范围定义重新创建表。

答案 1 :(得分:0)

如果要更改已配置的同步范围中的架构,则需要首先取消配置给定范围内的两个数据库。然后执行架构更改并再次为给定范围配置。 如果要同步表中的所有列,可以使用以下方法获取表模式

tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable( TableName,  Connection);

如果要同步表中的选定列,请使用该方法获取表模式。列列表是您需要同步的列名列表。

SqlSyncDescriptionBuilder.GetDescriptionForTable( TableName,  ColumnList,  Connection);