Значение записи NHibernate = NULL, когда ID <0 - PullRequest
1 голос
/ 27 февраля 2011

Мы хотели бы реализовать простое правило, в котором NHibernate назначит (сохранится) NULL для базы данных, когда идентификатор для сущности равен -1. Например, у нас есть учетная запись «in system», которая должна быть сохранена в базе данных как NULL.

Если мы попытаемся сохранить идентификатор -1 в базе данных, мы получим исключение внешнего ключа, поскольку идентификатор не существует во внешней таблице.

Мы используем NHibernate с FluentNhibernate.

1 Ответ

1 голос
/ 27 февраля 2011

Я думаю, что вы не правильно отобразили свою сущность. Если это правильно, вы должны сделать какой-то трюк: вы должны видеть не идентификатор, а ссылку на другую сущность, и в этом случае вы сохраните ссылку с нулевым значением. Даже в неправильном случае вы хотите отобразить объект со ссылкой, выраженной в виде идентификатора (который почти всегда неверен), если этот идентификатор может быть обнуляемым, отобразите его как обнуляемый, чтобы вы имели int? и вы можете использовать null для обозначения null вместо трюка -1.

См. Комментарии

Если пользовательский объект внутренне используется в качестве нулевого значения, перехватчик сеанса может помочь: работать с OnSave и обрабатывать особый случай, заменив фиктивный объект нулевым. Здесь вы можете найти документацию о NH-перехватчиках. В главе 11.2 того же документа есть часть, относящаяся к событиям, эквивалентам для такого рода проблем.

...