Вот мой сценарий: я был обеспокоен тем, что 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... но даже когда я это делаю, удаления не применяются. Есть ли какая-то внутренняя вещь с наборами данных, которая означает, что вы не можете изменить порядок обработки?