Авторы позиционируют свой продукт как:
"Fluent, XML-less, compile safe, automated,convention-based mappings for NHibernate."
То есть в нашем проекте не будет xml. Совсем.
В этом посте расскажу как поднял.
Я использовал NuGet в VS2010. Понадобится пакет Fluent NHibernate (в моем случае версия 1.2.0.712). NuGet автоматически выкачает все зависимости.
Я предполагаю, что у вас уже есть:
- Некоторая база в Oracle Server.
- Установленные на клиентском компьютере Oracle ODAC или Oracle Client.
- Необходимые протестированные строки подключения.
Возьмем любую сущность, например фотоальбом, принадлежащий пользователю User и содержащий в себе фотографии Images (свойство Thumbnail не рассматривается):
Обратите внимание на то что мы используем private setter для Id, а так же для коллекций, которые инициализируются в конструкторе. Помимо этого все свойства помечены виртуальными, это необходимо для NHibernate.
Рассмотрим код для маппинга нашей сущности:
MappingNames представляет из себя мой статический класс со строковыми константами имен таблиц и колонок, используемых в БД, ибо эти значения используются в нескольких проектах.
Класс отображения надо унаследовать от обобщенного класса ClassMap<>.
Метод Id() отображает идентификаторы, которые, в нашем случае, генерируются выбранным sequence; Map() отображает соответствующие свойства (используя соглашение об именах свойств для отображения на поля БД, так же можно задавать вручную с помощью метода Column(string)); Reference() идентичено NHibernate'овскому many-to-one, HasMany() — one-to-many, в соответствующих сущностях эти свойства должны быть прописаны с точностью до наоборот.
Пример конфигурирования БД:
Далее, метод OpenSession() используется в репозиториях или в Dependency Injection
Не забывайте так же со всеми бинарниками таскать и соответствующие провайдеры драйверов, в моем случае (Oracle ODAC) — библиотека Oracle.DataAccess.dll. Надо выставлять в свойствах ее Reference: Copy Local = True. Пишите тесты, чтобы видеть что вообще работает.
Вот так компонент помогает избавиться от xml и сделать всю конфигурацию строго типизированной.
Вопросы?
Желаю гибкого коннекта.