Неотображенные столбцы в NHibernate? - PullRequest
1 голос
/ 24 февраля 2009

Я работаю с устаревшей базой данных в Oracle, и в некоторых из моих таблиц есть столбцы, которые установлены в NOT-NULL, что мне не нужно в моей доменной модели, но, очевидно, мне нужно указать где-то, по крайней мере некоторое значение по умолчанию сохраняется в базе данных (например, таблица групп может иметь столбец «Отступ», который всегда ожидает значение char (8)).

Как бы я поступил по этому поводу в NHibernate? Есть простой способ сделать это? Если нет, кто-нибудь знает, как я мог бы сделать это (я думал об использовании Inteceptor, но на самом деле не знал бы, с чего начать ...). Я не могу изменить схему базы данных, так что, к сожалению, это не вариант (беглые версии тоже подойдут ...).

Ответы [ 5 ]

5 голосов
/ 24 февраля 2009

Если вы не хотите загрязнять свои POCO, вероятно, лучшим вариантом будет Interceptor. Взгляните на различные статьи о перехватчиках, например this .

На вашем перехватчике вы хотите проверить тип, чтобы вы знали, в какие поля помещать фиктивные данные. Убедитесь, что вы используете currentState [] в методе OnFlushDirty (OnFlushDirty - "update") и состояние [] в Метод OnSave («вставить»). Например (OnSave):

if (entity is Group)
{
    state[Array.IndexOf(propertyNames, "Indentation")] = "dummy value";
    return true;
}
return false;

Edit:

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

1 голос
/ 24 февраля 2009

вы могли бы пойти с настраиваемым CRUD sql , в Java я бы сказал, что частный установщик со значением по умолчанию для атрибута будет работать тоже

0 голосов
/ 26 сентября 2011

Я всегда думал, что такого рода проблемы лучше всего решить, указав значение по умолчанию для столбца.

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

Вот пример кода SQL: Изменить таблицу со значением по умолчанию

Я предполагаю, что, хотя БД унаследована, у вас есть некоторый контроль над ней, поскольку вы можете вставлять новые строки. Это очень дешевое и легкое решение.

0 голосов
/ 26 августа 2011

есть альтернатива, которая использует интерфейс IPropertyAccessor см http://elegantcode.com/2009/07/13/using-nhibernate-for-legacy-databases/

0 голосов
/ 24 февраля 2009

Ответ NHibernate заключается в реализации IInceptceptor .

...