Принудительная вставка идентификационных данных с помощью NHibernate / Fluent Nhibernate
У нас довольно надежная система, использующая NHibernate, мы находимся в процессе перехода с одного сервера базы данных на два сервера: один для администрирования и один для нашего общедоступного веб-сайта. Это в основном так, что мы можем делать такие вещи, как управление контентом с рабочим процессом, который не повлияет на текущий сайт. На сегодняшний день это две базы данных на одном сервере, но со временем я вижу использование двух физических машин с вызовом веб-службы для передачи данных.
Так, в качестве примера, один из наших маркетологов решает ввести новое продвижение через администратора и назначить его на 2 недели. Мы работаем над системой планирования, которая будет запускать новую акцию на нашем производственном сервере, когда она будет запущена. Намерение состояло в том, чтобы использовать тех же провайдеров NHibernate для передачи данных, но нам нужно поддерживать ссылочную целостность.
Мы используем свободный nhibernate, и я вижу, как пишу две разные карты классов, а затем использую некоторую форму внедрения зависимостей ( IE структурная карта) выбора, какую карту загружать. Я надеялся на лучший ответ, поскольку его невозможно поддерживать по мере роста системы. Какие-либо предложения?
1 ответ
ISession.Replicate не поддерживается со значениями ID, сгенерированными БД. Как показано на этой проблеме в трекере проблем NHibernate.
- Я предлагаю либо использовать собственный генератор идентификаторов, либо Guid/Guid.Comb, так как в этом случае вы сможете использовать репликацию NHibernate (как описано в выпуске).
- Вы также можете написать свой собственный код репликации, который не использует NHibernate, если это достаточно просто, это выполнимо.
- Используйте технологию репликации, которую поддерживает ваша БД. Раньше я использовал репликацию между серверами MS SQL, и это не так сложно настроить. Я вполне уверен, что другие RDBMS поддерживают подобные вещи.