假设我有一个包含2列的表(OrderId和OrderDate)。在最初的设计中,OrderId是代理(对于最终用户仍然有些意义,因为他们仍然喜欢引用OrderNumber 12345)PK与IDENTITY整数。由于我们开始采用SyncFx并支持离线客户端创建方案,因此我们决定添加新的列唯一标识符(GUID)作为新PK。
在我原来的工作 V1.0实现中,OrderId将被指定为离线创建记录的负值(-1,-2等)。当同步发生时,OrderId将被重新分配'next'号码(服务器将在表中的OrderId列上执行max()+ 1)。逻辑作为存储过程实现,并在插入触发器期间调用。
Update INSERTED set OrderId = b.NextNumber
FROM INSERTED a,
(
SELECT SyncGUID, ROW_NUMBER() OVER (ORDER BY SyncGUID) + (SELECT MAX(OrderId) MaxID FROM Order) as NextNumber
--select *
FROm Order
where OrderId <= 0
) b
where a.SyncGUID = b.SyncGUID
然而,在V2.0中,在syc之后,在服务器端创建记录并且OrderId确实被更新(从-1到'next'号码);但是,更新更改未下载到客户端。我想知道
答案 0 :(得分:0)
您的更改未被下载,因为它是在Sync的触发器内完成的,因此同步元数据没有得到更新以显示发生了更改。
我建议尝试在您自己的插入触发器中实现您的代码,而不是在Sync创建的触发器内部进行工作。
此外,您不希望使用INSTEAD OF
触发器,因为这将取代Sync Framework为其更改跟踪所需的工作。
通过这种方式创建自己的触发器,您的触发器将插入更改,并在该表的下一次同步时,将获取该更改。