同步框架,过滤虚假删除的行

本文关键字:删除 框架 过滤 同步 | 更新日期: 2023-09-27 18:21:26

上下文:我想通过wcf将Sql Server同步到Sql Compact。客户端(sqlce)只是不时地从服务器(sql2008)下载更新。在服务器上,任何东西都不会被删除,它只被标记为"已删除"(更具体地说,Version==MinValue意味着它已删除),

问题:我不希望我的客户删除他们数据库中的项目。当一个项目同时在服务器和客户端上,但随后被标记为已删除(版本=最小值)时,我希望该项目从客户端完全删除,而不仅仅标记为

你认为同步框架和过滤器可以实现这种情况吗?

同步框架,过滤虚假删除的行

您需要在WCF服务中设置筛选器。

不幸的是,我记不起细节了。

同步框架使用Tombstone Tables来实现这一点:
在SyncAdapter中,您可以定义tombstone表,删除的行应该移动到该表,这意味着它们仍然可用(并且"删除"可以很容易地同步),但不再在"主表"中。

如果您只是通过将行标记为已删除来进行软删除,那么这些行将作为更新级联到您的客户端。

在您的客户端中,只需删除所有已标记为删除的行,然后自己清除tombstone表。如果tombstone表中没有任何记录,同步框架将不会拾取这些删除的行。

另一个选项是在客户端上,删除标记为删除的行,订阅客户端提供程序的ChangesSelected事件,然后手动循环更改数据集以删除数据表中已删除的行。

也可以在服务器提供程序的ChangesSelected事件中截取这些行。您必须遍历change数据集和相应的数据表,找到所有具有deleted标志的行,并将这些行标记为deleted。它们将在目的地中应用为已删除。

请参阅此处的示例:http://jtabadero.wordpress.com/2011/03/07/manipulating-the-change-dataset-in-sync-fx/