NHibernate — запретить удаление определенного объекта (т. е. сделать доступным только для чтения)

Как я могу запретить NHibernate удалять один объект определенного класса? Программный способ, который я использую в данный момент, влечет за собой проверку уникального поля объекта «Имя».

Вот сценарий: у меня есть человек и группа. В группу могут входить лица и другие группы. Если будет предпринята попытка удалить группу с именем «Администраторы», это не произойдет из-за ограничений на уровне транзакций, которые я применяю (в частности, проверка столбца/поля «Имя» группы, поскольку оно уникально). Так что все в порядке.

Но теперь я думаю, что если будет создана другая группа и "Админы" станут ее подгруппой, то проверка не пройдет. Это будет означать удаление «Админов». Поэтому я ищу лучший способ, кроме обхода родительского/дочернего дерева сдерживания, например. используя NHibernate

Я не могу использовать общеклассовое ограничение, такое как «class Mutable=false», я имею в виду наличие ограничения только для чтения для одного или двух отдельных объектов определенного класса.

С уважением,

_NT


person Community    schedule 01.10.2009    source источник


Ответы (1)


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

Это пример использования слушатели.

person Canton    schedule 01.10.2009
comment
Но это влечет за собой проверку многих вещей вручную. Нет ли способа сделать это с помощью NHibernate? - person ; 01.10.2009
comment
Извините, я не могу дать лучшее предложение для вашего случая. Позвольте мне сказать это так. Проверка многих вещей вручную связана со сложностью предметной области. ORM не может помочь в этом. Без обид, но, возможно, пришло время переосмыслить дизайн объекта предметной области, если еще не поздно. - person Canton; 01.10.2009
comment
Зачем переосмысливать дизайн предметной области? Мне просто нужно сделать пару сущностей доступными только для чтения наилучшим из возможных способов - лучше, чем делать ifs и elses, ЕСЛИ это существует... Отсюда мой вопрос. - person ; 01.10.2009
comment
стать дочерним в отношениях родитель/потомок, это привело меня к проблемам с дизайном объекта предметной области. Извините, если я неправильно понимаю вашу ситуацию. Так вы говорите о чем-то вроде проверки внешнего ключа на уровне ORM? В НГ такого нет. - person Canton; 01.10.2009
comment
Если быть точнее: у меня есть человек и группа. В группу могут входить лица и другие группы. Если будет предпринята попытка удалить группу с именем «Администраторы», это не произойдет из-за ограничений уровня DAL (не NHibernate atm), которые я применяю (в частности, проверка столбца/поля «Имя группы»). Так что все в порядке. Но теперь я думаю, что если будет создана другая группа и Админы станут ее подгруппой, то проверка не пройдет. Это будет означать удаление Admins. Поэтому я ищу лучший способ, кроме обхода родительского/дочернего дерева сдерживания, например. используя NHibernate - person ; 01.10.2009
comment
Моя личная практика заключается в выполнении такой проверки на уровне сервиса, а не на уровне доступа к данным. Вернемся к вашему вопросу. Нет. В этом случае не должно быть никакой конфигурации/отображения, чтобы помочь вам. И я не думаю, что какой-либо другой ORM может помочь. - person Canton; 01.10.2009