С появлением в Nhibernate 3.2 Mapping By Code маппить стало гораздо легче, приятней и быстрее (MappingByCode не требует десериализации xml). Но хотелось большего, что всё как-нибудь само замапилось. Это возможно без лишних усилий (спасибо Фабио за ConventionMapper), но соглашения по-умолчанию отличаются от моих собственных. Вот этот недостаток я решил исправить в проекте 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.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Удачных маппингов!
Комментариев нет:
Отправить комментарий