Я думаю, что делать это на уровне хранилища гораздо лучше. Главным образом потому, что вы можете в будущем решить добавить какой-либо метод доступа к вашему хранилищу, который не проходит через MVC (например, интерфейс WCF к данным).
Таким образом, возникает вопрос, как вы решите проблемы, которые вы перечислили в отношении этого слоя NHibernate?
Отфильтровать полезные объекты достаточно просто. Я, вероятно, сделал бы это через пользовательский атрибут типа объекта. Вы можете пометить объекты, которые вы хотите отслеживать, или те, которые вы не хотите; что проще.
Выяснить, что на самом деле задумал контроллер, сложнее. Я собираюсь оспорить, что вы можете "получить HttpContext"; Я не думаю, что это хорошая идея сделать это в хранилище, потому что разделение интересов. Репозиторий не должен зависеть от Интернета. Одним из методов будет создание пользовательских методов в хранилище для действий, которые вы хотите отслеживать по-разному; это особенно привлекательно, если есть другие аспекты этих правок, которые ведут себя по-разному, такие как разная безопасность. Другой метод состоит в том, чтобы исследовать изменения, сравнивая старую и новую версии объектов и выявляя фактический характер изменений. Третий метод заключается в том, чтобы не пытаться определить природу изменения, а просто сохранить версии до и после в журнале, чтобы человек, который читает журнал, мог сам разобраться в этом.