Держите сеанс открытым для всей вашей единицы работы. Если ваш сеанс слишком мал, вы не сможете воспользоваться кешем уровня сеанса (что важно). Каждый раз, когда вы можете предотвратить обратное обращение к базе данных, вы сэкономите много времени. Вы также не можете воспользоваться ленивой загрузкой, что важно понять.
Если продолжительность вашего сеанса слишком велика, вы можете столкнуться с другими проблемами.
Если это веб-приложение, вы, вероятно, хорошо справитесь с шаблоном session-per-httpRequest. По сути, это HttpModule, который открывает сеанс в начале запроса и сбрасывает / закрывает в конце. Обязательно сохраните сеанс в HttpContext.Items НЕ СТАТИЧЕСКОЕ ПЕРЕМЕННОЕ. <--- приводит ко всем видам проблем, с которыми вы не хотите иметь дело. </p>
Вы также можете посмотреть RhinoCommons за единицу выполнения работы.