Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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# 同步框架,过滤假删除行_C#_Sql_Synchronization_Microsoft Sync Framework - Fatal编程技术网

C# 同步框架,过滤假删除行

C# 同步框架,过滤假删除行,c#,sql,synchronization,microsoft-sync-framework,C#,Sql,Synchronization,Microsoft Sync Framework,背景: 我想通过wcf将Sql Server同步到Sql Compact。客户端(sqlce)只会不时从服务器(sql2008)下载更新。在服务器上,没有任何内容被删除,它只被标记为“已删除”(更具体地说,Version==MinValue表示已删除) 问题: 我不希望我的客户在他们的数据库中删除项目。 当一个项目同时在服务器和客户端上,但随后被标记为已删除(Version=MinValue)时,我希望该项目从客户端完全删除,而不仅仅是标记 您认为使用同步框架和筛选器可以实现这种情况吗?您需要在

背景: 我想通过wcf将Sql Server同步到Sql Compact。客户端(sqlce)只会不时从服务器(sql2008)下载更新。在服务器上,没有任何内容被删除,它只被标记为“已删除”(更具体地说,Version==MinValue表示已删除)

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


您认为使用同步框架和筛选器可以实现这种情况吗?

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


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

同步框架使用墓碑表:

在SyncAdapter中,您可以定义一个逻辑删除表,删除的行应该移动到该表中,这意味着它们仍然可用(“删除”可以轻松同步),但不再在“主表”中。如果您只是通过将行标记为已删除来执行软删除,这些行将作为更新级联到客户端

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

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

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


请看这里的示例:

我认为WCF在这里帮不了我。。由于同步框架将始终同步deleted@Zapacila当前位置大约3年前,我还没有完全做到这一点。这种方法需要使用过滤命令实现您自己的SyncAdapter,然后它也可以工作…@chrfin:您可以扩展生成的代码IIRC,它不多。sync framework不将行移动到逻辑删除表,它只存储被删除行的主键,因为删除目标中的行只需要主键。@JuneT:我想他是说在客户端,它们被删除了。例如,在服务器端,您可以实施删除触发器,以便在删除时添加/更新墓碑记录。甚至在客户端。同步框架从不复制该行。如果您只需要删除一行的主键,那么该行的所有列都有什么用处?