В идеале, сеанс в ASP должен хранить наименьшее количество данных, которое вы можете избежать. Хранение ссылки на любой объект, который удерживает системные ресурсы открытыми (в частности, соединение с базой данных), является определенным убийством масштабируемости. Кроме того, хранение незафиксированных данных в переменной сеанса в большинстве случаев является плохой идеей. В целом, похоже, что текущая реализация злоупотребляет объектами сеанса, чтобы попытаться смоделировать приложение с состоянием в предположительно среде без состояния.
Несмотря на то, что модель ASP.NET управляет состоянием автоматически через скрытые поля, она очень злонамеренная, но она действительно должна устранить большую часть необходимости сохранять что-либо в переменных сеанса.
Мое эмпирическое правило заключается в том, что чем более масштабируемым (с точки зрения пользователей / обращений) должно быть приложение, тем меньше вы можете избежать использования состояния сеанса. Однако есть компромисс. Для веб-приложений, где пользователь неоднократно обращается к одним и тем же данным и обычно имеет довольно длительный сеанс для каждого использования сайта, некоторое кэширование (при необходимости в объектах сеансов) может фактически помочь масштабируемости за счет снижения нагрузки на сервер БД. Идея заключается в том, что обрабатывать уровень представления намного дешевле и сложнее, чем на внутренней БД. Конечно, при всех обстоятельствах этот совет следует принимать в меру и не применим во всех ситуациях, но для довольно простого внутреннего CRUD-приложения он должен хорошо вам служить.