Страницы

понедельник, 30 января 2012 г.

NHibernate. Mapping By Code. Вся модель в одну строчку.

  С появлением в Nhibernate 3.2 Mapping By Code маппить стало гораздо легче, приятней и быстрее (MappingByCode не требует десериализации xml). Но хотелось большего, что всё как-нибудь само замапилось. Это возможно без лишних усилий (спасибо Фабио за ConventionMapper), но соглашения по-умолчанию отличаются от моих собственных. Вот этот недостаток я решил исправить в проекте Enhima.
Использовать ее очень легко:
var config = new Configuration(); // Это обычный класс конфигурации NHibernate
config.MapEntities(From.ThisApplication()); // А это весь маппинг
  Enhima будет искать все сущности, находящиеся в текущем домене приложений, и автоматически маппить их по соглашениям.
 Я не буду рассказывать про все соглашения, их можно найти в коде. Но пара слов о главном:
Enhima ищет все объекты, наследующие класс Enhima.Entity. Это упрощённая версия AbstractEntity из проекта uNhAddIns. Но есть еще одна - сущность AggregateRoot. Enhima использует их для управления каскадным сохранением удалением, согласно идеям Эрика Эванса из книги DDD.
  Соглашения - это хорошо и быстро. Но что если соглашений недостаточно? Это не проблема, Enhima переопределит значения из маппинга по соглашениям значениями из ClassByClass маппингов (ClassMapping<T>, SubclassMapping<T>, UnionSubclassMapping<T>, JoinSubclassMapping<T>)  без дополнительных усилий.

 Полученные маппинги неплохо было бы протестировать. Для этого есть еще один метод:
var config = new Configuration(); // Это обычный класс конфигурации NHibernate
config.СonfigureSqlite(); // Для тестирования с файлом БД.
config.СonfigureSqliteInmemory(); // Для тестирования в памяти.
 Такая конфигурация вряд ли подойдёт для развёртывания, но для быстрых интеграционных тестов вполне.  В последнее время любой приличный проект под .net обязан иметь свой nuget. Enhima не исключение :) Правда, пока она находиться в стадии beta-тестирования. Поэтому для установки в проект стоит воспользоваться ключом -pre:
install-package enhima.entities -pre
install-package enhima.mapping -pre
Удачных маппингов!

Комментариев нет:

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