Sync Framework Deletes не применяется к клиенту

Вот мой сценарий: я был обеспокоен тем, что SqlCeSyncClient применяет удаления, затем вставки, а затем обновления. У меня бывают случаи, когда строка может быть разыменована из другой таблицы, а затем удалена. Например, представьте это:

У меня есть две таблицы; Customer и Area, из которых Customer.Area ссылается на Area.Name с ограничением внешнего ключа

insert into Area values('Australia')
insert into Customer values('customer1','Australia')

-- Синхронизация происходит. Клиент получает 2 вкладыша.

update Customer set Area = 'New Zealand' where Area = 'Australia'
delete from Area where Name = 'Australia'

-- Синхронизация происходит. Клиент получает 1 обновление и 1 удаление

SqlCeClientSyncProvider пытается применить удаление first, что ему не удается из-за ограничений ссылочной целостности на клиенте.

Мой первый вопрос: с какой стати ребята из Microsoft запрограммировали SyncClient для обработки удалений ПЕРВЫМ, когда это нарушает все правила ссылочной целостности? Разве они не должны применять удаления ПОСЛЕДНИМИ????

Мой следующий вопрос: мне удалось изменить порядок, проверив код и самостоятельно написав весь метод ApplyChanges... но даже когда я это делаю, удаления не применяются. Есть ли какая-то внутренняя вещь с наборами данных, которая означает, что вы не можете изменить порядок обработки?


person stitty    schedule 20.07.2011    source источник


Ответы (1)


Проблема не в порядке выполнения операций (удалить, обновить, вставить,...), а в том порядке, в котором вы разместили свои таблицы синхронизации...

Вы должны были синхронизировать таблицу Area сначала и после таблицы Customer.

person Rafael Azevedo    schedule 19.06.2013