Можно переопределить свойство Тип отображения (файл hbm.xml, NOT fluent) на NHibernate?Override NHibernate Тип свойства runtime
Контекст: Я работаю над приложением, которое подключается в основном на SQL Server (LEGACY DATABASE SCHEMA), но оно должно работать и с некоторыми базами данных Oracle. У нас много сущностей, и мы отказались хранить две версии файлов сопоставления, поэтому мы решили определить базовое сопоставление (SQL Server) и сделать некоторые управляемые изменения для работы над Oracle (например, генератор идентификаторов, столбец и имена таблиц, ...).
Теперь у нас есть новая проблема с полями LONG Oracle (LEGACY OBSOLETE поле типа), он не работал на NHibernate, и мы должны определить пользовательские IUserType (http://sonyarouje.com/2012/11/07/nhibernate-and-oracle-long-varchar-field/), это решение совместимо с SQLServer, но это требует DLL Oracle.DataAccess.dll, и во избежание этой проблемной DLL мы установили бы этот настраиваемый тип во время выполнения только при подключении к Oracle. Но тип типа элемента (NHibernate) является readonly, и я не нашел способа его установить.
Я использую NHibernate 3.3.
Спасибо Radim, но, несмотря на «неизменность» конфигурации, я изменил некоторые параметры db (генератор идентификаторов, имена таблиц и столбцов ...), и я подумал, что можно изменить тип свойства в так же. Но я перехватил конфигурацию, чтобы динамически назначать тип свойства, когда я в Oracle, я не хочу копировать и вставлять файл сопоставления, потому что у меня много объектов (около 200), и я не могу mantain 2 версии всех объектов. – Marc
Марк, я бы предложил ... не делай этого. Это не способ, а не способ, которым можно было бы сохранить ... это принесет вам только проблемы. Просто используйте конфигурацию, условную, чтобы создать специальные Заводы для специальных целей. Все, что находится внутри фабрики сеансов, НЕ для внешней настройки. Это ООП ... и инкапсуляция. Что делать, если новая версия меняет что-то? Так. Если я могу дать вам совет - создайте специальную динамическую конфигурацию - НЕ меняйте фабрику после ее создания. Надеюсь, это немного помогает ... –
[Мой последний комментарий был отправлен до того, как я его завершу] Последний вопрос: могу ли я перехватить конфигурацию, чтобы динамически назначать тип свойства, когда я в Oracle, я не хочу скопировать и вставить файл сопоставления, потому что у меня много объектов (около 200), и я не могу использовать 2 версии всех объектов. Я хочу работать с базой и «конкретными и централизованными» изменениями над ней. – Marc