Быстрый старт с Fluent NHibernate. Часть 2

Часть 1 | Часть 2 | Часть 3 (автомэппинг)


Эта статья является продолжением и содержит материал, рассказанный на заседании MCP клуба 24 декабря 2009 года.

В прошлой части мы рассмотрели базовые возможности Fluent NHibernate, научились строить мэппинг. Теперь попробуем использовать все это для создания базы данных и сохранения/загрузки сущностей в базе.

Разобьем задачу на подзадачи:

  •  Создание конфигурации NHibernate (класс Configuration)
  •  Создание структуры базы
  •  Управление сессиями и транзакциями
  •  Управление сущностями (CRUD)

Итак, конфигурирование подключения мы рассматривали в прошлой части, здесь не будем заострять на этом внимание, повторю лишь код:

Структура базы

Для создания структуры базы в NHibernate существует класс-утилита SchemaExport.

Выполнение метода Create приведет к созданию всех таблиц и связей между ними, согласно описанных мэппингов.

Управление сессиями и транзакциями

В мире NHibernate принято использовать сессии для манипулирования сущностями. Сессия представляет контекст подключения к базеданных и выполняет трекинг сущностей (отслеживает изменения свойств и тп.). Кроме того, сессии поддерживают транзакции. Для того, чтобы создать сессию, требуется сначала создать фабрику сесиий (на основе нашей конфигурации):

Теперь у нас есть возможность создавать сесиии:

По окончании использования сесии мы сбрасываем ее состояние в базу (Flush) закрываем ее (Close).

В рамках сессий мы можем и должны использовать транзакции (вы же знаете, что это такое?):

CRUD, шаблон IRepository, Generic DAO и все все все…

Последнее, что осталось сделать — это реализовать возможность сохранения и загрузки наших сущностей.

Для этого существует NHibernate Best practice рекомендация — использование Generic DAO.

В качестве частного случая использования этого шаблона рассмотрим реализацию репозитория:

Как видно, наш репозиторий будет generic-реализацией, это позволит использовать его для различного типа сущностей.

Метод Save в данном случае отвечает как за обновление существующей сущности в базе, так и за создание новой сущности.

Вот реализация репозитория:

Ну вот, теперь все готово, ниже приведу код для создания и сохранения конкретных экземпляров сущностей:

Ну и код для загрузки этих сущностей:

p.s. Для того, чтобы увидеть строковые представления, необходимо переопределить метод ToString()

Вот собственно и все, надеюсь, вам был интересен и полезен данный материал.

В ближайшее время мы рассмотрим возможности модульного тестирования Fluent NHibernate с использованием технологии NUnit.

Часть 1 | Часть 2 | Часть 3 (автомэппинг)


Похожие записи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля отмечены *