Как вы обрабатываете «Sync Framework автоматически не обрабатывает удаление строк, которые больше не удовлетворяют условию фильтра» - PullRequest
3 голосов
/ 08 декабря 2011

http://msdn.microsoft.com/en-us/library/dd918848.aspx

"Важно понимать, что область действия - это комбинация таблиц и фильтров. Например, можно определить отфильтрованную область с именем sales-WA, которая содержит только данные о продажах для штата Вашингтон из таблицы customer_sales. Если Вы определяете другой фильтр в той же таблице, например sales-OR, это другая область. Если вы определяете фильтры, имейте в виду, что Sync Framework не обрабатывает автоматически удаление строк, которые больше не удовлетворяют условию фильтра. Например, если пользователь или приложение обновляет значение в столбце, который используется для фильтрации, строка перемещается из одной области в другую.Строка отправляется в новую область, к которой теперь принадлежит строка, но строка не удаляется из старой область применения. Ваше приложение должно справиться с этой ситуацией. "

Мне просто интересно, кто-то может пролить некоторый свет на то, как обрабатывать «Sync Framework автоматически не обрабатывает удаление строк, которые больше не удовлетворяют условию фильтра»?

Большое спасибо.

1 Ответ

2 голосов
/ 08 декабря 2011

Поставщики синхронизации будут (как часть шага инициализации) автоматически создавать таблицы-надгробия и триггеры для отслеживания удалений строк. Когда строки не удаляются, а обновляются таким образом, чтобы выпасть из области видимости, тогда автоматически сгенерированная схема не будет регистрировать их как удаления. Он будет регистрировать их как обновления. Итак, чтобы расширить пример Microsoft, предположим, что ваше приложение синхронизирует только данные Вашингтона с торговыми представителями Вашингтона. Некоторые продажи, которые были первоначально введены как продажи в Вашингтоне, исправлены и перенесены в Орегон. Среда синхронизации не будет знать, что она должна удалить эти записи орегонского происхождения из локальных баз данных представителей Вашингтона.

У вас есть несколько вариантов решения этой проблемы:

  • Измените средства обеспечения, чтобы генерировать триггеры, которые будут обрабатывать ситуацию, вместо триггеров по умолчанию, которые этого не делают. Посмотрите на расширение SqlSyncScopeProvisioning для достижения этой цели. Если все сделано правильно, это, вероятно, самое масштабируемое / расширяемое решение.
  • Измените ваше приложение, чтобы оно обнаруживало попытку вывести строку из области действия, и чтобы приложение удаляло строку и вставляло ее заново, а не просто обновляло (вероятно, в хранимой процедуре). Если вы уже используете хранимые процедуры для обработки обновлений, это может быть хорошим вариантом.
  • Добавьте фоновый сервис или процесс, который проходит и ищет записи, которые не соответствуют области действия, и удаляйте их. Это может оказаться самым простым решением, особенно если ваше приложение уже развернуто.
...