我遇到的问题是,在Windows XP 32位/ SQL Server Express上的已恢复数据库中,使用以下代码未更改数据库中Sync Framework 2.1元素的副本键映射和scope_info表中的scope_id值2008(x86)。它可以在我的其他客户端上运行,即Windows 7 64位/ SQL Server Express 2008(x86):
SqlSyncStoreRestore databaseRestore = new SqlSyncStoreRestore(clientConn); databaseRestore.PerformPostRestoreFixup();
SUB QUESTION 1: 它不起作用,但也不会抛出任何异常,这使得排除故障变得更加困难。它是从我在x64计算机上构建的小型控制台应用程序(目标x86)执行的(使用Visual Studio x86)。我想知道32/64位是否是罪魁祸首。任何线索?但是,这让我想知道:
SUB QUESTION 2: “是否有一个SQL查询等同于使用Sync Framework的C#的PerformPostRestoreFixup()?”
我是Sync Framework的新手,我还没有完全看到Microsoft SQL Server数据库同步的全貌。我注意到SyncOrchestrator / SqlSyncProvider组合不使用内置的SQL Change Tracking。令我难以置信的惊喜!它现在让我感到困扰的是一个更加折磨的问题:
SUB QUESTION 3: 内置的SQL Server Change Tracking和Sync Framework是两个完全独立的平台,可以在其上构建我们的同步方案吗?我希望我用英语说得对。换句话说,他们每个人都完全没有意识到另一个吗?
提前感谢您的帮助!我很失落大声笑!
亲切的问候,
Zyxy
答案 0 :(得分:0)
问题1 - 您是否尝试过启用同步fx跟踪?
VS Project Properties-> Build选项卡下的Platform Target应该与安装的Sync Fx平台相匹配。例如,x86平台目标应具有Sync Fx x86
如果x86 / x64不匹配,通常会引发COM异常。
问题2 - 您可以运行SQL事件探查器来查看PerformPostRestoreFixup。但我坚持使用框架这样做,因为涉及一些同步元数据处理。
问题3 - SQL更改跟踪只是更改跟踪。你仍然需要一个同步应用程序来使用它。
SQL CT跟踪已更改的内容,并允许您查询已更改的内容。它本身不是一个同步平台。
您需要一个同步应用来查询它,就像Sync Fx一样。或者您可以手动编写自己的SQL查询来查询更改。
同步Fx较旧的SQLCeClientSyncProvider / DBServerSyncProvider / Sync Agent(本地数据库缓存项目项中使用的代理)可以使用SQL CT。
答案 1 :(得分:0)
更新:为什么它没有更改值但是没有抛出异常的原因?以下是最有可能的解释。它没有完全回答为什么scope_id没有得到更新的问题,但它确实提供了额外的提示:
PerformPostRestoreFixup()适用于数据库中的所有范围。我在数据库中定义了另一个(有效)范围,该范围已成功更改其scope_id值。但是,我的第二个范围(我无法更改scope_id的范围)存储在另一个模式(不是默认的.dbo)中。我想它只是没有看到范围,或认为它无效,因此没有打扰通知我。我试图取消第二个范围,并得到以下错误:
所以这两个问题可能有相同的根本原因。
第二个范围确实存在,我可以使用select语句查看该darn scope_id。现在我怎么知道配置是否有效?成功恢复后为什么会突然失效?我觉得它缩小了但对我来说还不够嘿嘿;-)我会继续发布我的发现和解决方案以防万一有人给了该死的哈哈!开玩笑,但有一天,谁知道它可能会帮助(或混淆)取决于我猜的那天的情绪;-)干杯!
答案 2 :(得分:0)
好的,感谢JuneT指向我同步Fx 2.1 SDK的文档(这里或我在另一个讨论线程中读到它?),我意识到我有一个我还没试过的属性。在线阅读Sync Fx 2.0(以及其他?)存在非dbo模式和多范围数据库问题,我想我会尝试一下。只需在我的控制台应用程序中添加以下C#行即可解决它!
databaseRestore.ObjectSchema =“syncSchemaName”;
JuneT的很多人最终都指出了一些好的读物,因此我会将那一个标记为答案。很多人感谢!!