У меня есть настольное (winforms) приложение, которое использует базу данных Firebird в качестве хранилища данных (во встроенном режиме), и я использую NHibernate для ORM. Одна из функций, которую мы должны поддерживать, - возможность импортировать / экспортировать группы данных в / из внешнего файла. В настоящее время этот внешний файл также является базой данных с той же схемой, что и основная база данных.
У меня уже есть настроенный NHibernate для просмотра нескольких баз данных, и я могу работать с двумя базами данных одновременно. Проблема, однако, заключается в копировании данных между двумя базами данных. У меня есть две стратегии копирования: (1) копирование со всеми одинаковыми идентификаторами для объектов [также известный как импорт / экспорт] и (2) копирование с использованием в основном новых идентификаторов [также известный как копия / копия]. Я говорю «в основном новый», потому что есть некоторые элементы поиска, которые всегда будут копироваться с одним и тем же идентификатором.
Копирование всего с новыми идентификаторами - это хорошо, потому что у меня просто есть метод «CopyForExport», который может создавать копии всего, а не назначать новые идентификаторы (или стирать все идентификаторы в дереве объектов).
Каков наилучший метод для решения этой ситуации и копирования данных между базами данных при сохранении идентичных идентификаторов?
Пояснение: я не пытаюсь синхронизировать две базы данных, просто экспортирую подмножество (выбираемое пользователем) или данные для передачи кому-либо еще (который затем импортирует подмножество данных в свою собственную базу данных).
Дальнейшее уточнение: я думаю, что я выделил проблему следующим образом:
Я хочу использовать функцию ISession.SaveOrUpdate в NHibernate, поэтому я настроил свои сущности с помощью генератора идентификаторов, который не «назначен». Однако у меня возникает проблема, когда я хочу переопределить сгенерированный идентификатор (для копирования данных между несколькими базами данных в одном процессе).
Есть ли способ использовать генератор Guid.Comb или UUID, но иногда можно указать мой собственный идентификатор (для передачи в другое соединение с базой данных с той же схемой).