nhibernate softdelete где переопределить - PullRequest
0 голосов
/ 17 июля 2011

Хорошо, В моем решении я реализовал программные удаления, установив для IsDeleted значение true вместо удаления объекта.

Я также добавил Where IsDeleted = false в класс Mapings.

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

Но теперь в конкретных запросах мне нужно показать те, которые удаляются инструментом. Как я могу переопределить это поведение в некоторых запросах?

Пожалуйста, помогите. Спасибо Luka

Ответы [ 2 ]

1 голос
/ 18 июля 2011

+ 1 фильтр отлично подходит для таких сценариев, но имейте в виду, что они не работают с ассоциациями «один к одному», «один-к-одному».

Так же и в случае классов Foo и Bar, где Bar мягко удалено, а Foo указывает на Bar, и сопоставление отображается (т. е. Foo.Bar), если вы выбираете Foo, а Bar удаляется мягко, объект все еще будет гидратирован.

Это проблематично, когда вы используете логику, подобную

if (Foo.Bar != null) {
   //will never execute
}

Вы можете изменить это поведение, сделав тривиальное изменение в библиотеке, я написал пост на http://savale.blogspot.com/2010/01/enabling-filters-on-mapped-entities.html, которыйпоказывает, как это сделать.Он описывает действие для v2.1.2, но он аналогичен для v3.0 + pf NHibernate

1 голос
/ 18 июля 2011

Вместо этого я бы посоветовал вам реализовать функциональность, используя вместо этого фильтры.

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

Это очень похоже на то, что описано здесь: NHibernate: создание критерия, который применим ко всем запросам в таблице

...