NHibernate: mapping class hierarchy

Эта статья погрузит Вас в тонкие материи работы с NHibernate, а именно mapping иерархии классов в смешанном стиле table-per-subclass + table-per-hierarchy + discriminator.

В стиле table-per-subclass, равно как и table-per-hierarchy, нет ничего особенного, это все довольно стандартные и банальные вещи, если речь идет об отображении иерархии классов. Интересное начинается тогда, когда задача выходит за рамки простых учебных примеров, и нужно, например, совместить эти два стиля в рамках отображения одной иерархии классов. Как раз в этих ситуациях и проявляется истинная мощь NHibernate. Об этом мы сегодня и поговорим.

Попутно будет раскрыт ряд интересных моментов, таких как:

  • Что такое implicit polymorphism в NHibernate.
  • В чем заключается сложность mapping'a интерфейсов.
  • [BONUS] Как в NHibernate вытянуть все данные из БД в рамках одного простого запроса.
  • Как выглядит sql запрос, который сгенерирует NHibernate для иерархии классов.
  • Использование любого sql-выражения в качестве discriminator, а не только фиксированной колонки.
Mapping будет описываться c помощью Fluent NHibernate, также будут даваться ссылки на raw xml-based конструкции.

DI/IoC container lifestyles

В прошлой статье были описаны top-level понятия, охватывающие проблемы управления зависимостями между компонентами в приложении. Были показаны подходы к их решению, в частности при помощи Dependency Injection/Inversion of control контейнеров.

В этой статье будет рассмотрено понятие lifestyle в контексте DI/IoC, описаны существующие типы lifestyle политик на примере Castle.Windsor и Autofac, а также будет показана реализация собственной lifestyle политики для Castle.Windsor.

  1. What is lifestyle?
  2. Lifestyle types
  3. Component tracking and release
  4. Lifestyle types comparison in Castle.Windsor and Autofac
  5. "Per lifetime scope" lifestyle
  6. Implementation of "per lifetime scope" lifestyle for Castle.Windsor