Руки поотрываю :) Транзакцией должна быть передача только каждого отдельного документа. Иначе по ненадежному каналу есть шанс не закончить репликацию никогда.
Хорошо, передавать их еще раз не будем, но и в базу их лучше не класть, а то ведь действительно, получится, как с репликацией строк – книгу с новым автором сохранили, а вот самого автора нам не дали. В таком случае нужен кеш на уровне Layer'a который по сигналу будет отправляться в базу. Связь оборвалась – кеш не сохраняем, но и не скидываем, начинаем повторную репликацию и т.д, пока нам не отдатут все объекты, вот тогда делаем коммит. В каком-то смысле тоже транзакция.
Так тоже нельзя. Потому что опять-таки если связь легла надолго, все объекты нам могут не отдать до нашей перезагрузки.
Правильнее переделать бизнес-логику приложения, чтобы она не дурела, если некоторых связанных объектов нет.
Для того, чтобы стало понятнее, о чем речь, представьте себе ситуацию, когда периодичность репликации два дня, а время репликации три часа (канал медленный, данных много).