Microsoft Sync Framework 2.0: возможно ли обновить значение столбца в рамках одной и той же сценария синхронизации (обновление сервера загрузки клиента)? - PullRequest
1 голос
/ 31 августа 2010

Допустим, у меня есть таблица с 2 столбцами (OrderId и OrderDate).В оригинальном дизайне OrderId является суррогатом (который все еще имеет некоторое значение для конечного пользователя, поскольку они все еще любят ссылаться на OrderNumber 12345) PK с целым числом IDENTITY.Поскольку мы начинаем использовать SyncFx и поддерживать сценарий создания автономного клиента, мы решили добавить новый уникальный идентификатор столбца (GUID) в качестве нового PK.

В моей старой реализации , работающей V1.0, OrderId будет назначен как отрицательное значение (-1, -2 и т. Д.) Для созданных в автономном режиме записей.когда произойдет синхронизация, OrderId будет переназначен со следующим номером (сервер выполнит max () + 1 для столбца OrderId в таблице).логика реализована как хранимая процедура и будет вызываться во время триггера вставки.

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 до следующего номера);однако это изменение обновления не было загружено клиенту.Мне было интересно

  1. Я изучал логику в _selectchanges () SProc.мне кажется, что мне может потребоваться вручную манипулировать [local_update_peer_timestamp] для того, чтобы перечисление могло его подхватить!!
  2. Поскольку вся логика выполняется внутри триггера вставки (запись которого еще не передана вфактическая таблица), мне также интересно, возможно ли, чтобы перечисление вызывалось снова после фиксации записи в таблице сервера.(без вызова другой синхронизации)
  3. Будет ли триггер "INSTEAD OF INSERT" предлагать какую-либо помощь в этом случае ?!Я пробовал несколько раз, но не сработал с моими ограниченными знаниями.

1 Ответ

0 голосов
/ 08 августа 2013

Ваше изменение не загружается, так как оно выполняется внутри триггера Синхронизации, поэтому метаданные синхронизации не обновляются, чтобы показать, что изменение произошло.

Я бы предложил попробовать реализовать ваш код внутриВаш собственный триггер вставки вместо выполнения работы внутри триггеров, созданных Sync.

Кроме того, вы не захотите использовать триггер INSTEAD OF, поскольку это заменит работу, которую Sync Framework должен выполнить для его изменения.tracking.

Создав таким образом свой собственный триггер, ваш триггер вставит изменение, и при следующей синхронизации этой таблицы это изменение будет получено.

...