Как создать триггеры Oracle с экспортом схемы NHibernate? - PullRequest
3 голосов
/ 16 февраля 2012

Предположим, мы разрабатываем слой данных и следуем принципу «сначала код». База данных генерируется из модели с использованием SchemaExport. И я хочу реализовать следующий сценарий создания идентичности:

  • каждая таблица имеет свою последовательность и триггер
  • триггер имеет тип "для каждой строки" и вставляет следующее значение последовательности, когда данные вставляются в таблицу.

Этот подход поддерживается NHibernate при использовании (с беглостью)

Id(x=>x.Id).GeneratedBy.TriggerIdentity();

Но когда я делаю SchemaExport в файл, ни последовательность, ни триггер не генерируются. Как заставить NHibernate выдать DDL-код для создания TRIGGER и соответствующей SEQUENCE?

1 Ответ

2 голосов
/ 17 февраля 2012

Вы должны явно указать NH, какие дополнительные объекты вы хотите, чтобы он создал для вас.Насколько я знаю, свободный NH не позволяет напрямую настраивать вспомогательные объекты базы данных.Добавьте в ваш проект файл .hbm.xml в качестве встроенного ресурса

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<database-object>
    <create>
        create ...
    </create>
    <drop>
        drop ...
    </drop>
</database-object>
</hibernate-mapping>

Затем скажите свободному NH выбрать его

.Mappings(m =>
{
    m.HbmMappings.AddFromAssemblyOf<...>();
         ... 
})

SchemaExport выполнит ваши секции создания и удаления при экспорте схемы.

...