Почему бы не сохранить его в сеансе?Просто извлеките набор записей один раз, вставьте его в сеанс и извлекайте его каждый раз, когда захотите.Я делаю нечто подобное для других вещей, и я считаю, что мой метод должен работать для вас.В моем коде у меня есть менеджер сеансов, который я вызываю напрямую из любого фрагмента кода, для которого нужны значения сеанса.Я выбираю этот метод, поскольку могу запрашивать результаты и манипулировать методами хранения и поиска.Когда я полагаюсь на NHibernate, чтобы выполнить кэширование для меня, у меня нет детальности контроля, чтобы определенные наборы записей были доступны только для определенных сессий.Я также считаю, что NHibernate не так эффективен, как использование сессии напрямую.При профилировании использования процессора и памяти я обнаружил, что этот метод быстрее и использует немного меньше памяти.Если вы хотите сделать это на уровне сайта вместо сеанса, посмотрите на HttpContext.Current.Cache.
Следующий пример отлично работает для хранения и получения наборов записей:
// Set the session
SessionManager.User = (Some code to pull the user record with relationships. Set the fetch mode to eager for each relationship else you will just have broken references.)
// Get the session
User myUser = SessionManager.User;
public static class SessionManager
{
public static User User
{
get { return GetSession("MySessionUser") as User; }
set { SetSession("MySessionUser", value); }
}
private static object GetSession(string key)
{
// Fix Null reference error
if (System.Web.HttpContext.Current == null || System.Web.HttpContext.Current.Session == null)
{
return null;
}
else
{
return System.Web.HttpContext.Current.Session[key];
}
}
private static void SetSession(string key, object valueIn)
{
// Fix null reference error
if (System.Web.HttpContext.Current.Session[key] == null)
{
System.Web.HttpContext.Current.Session.Add(key, valueIn);
}
else
{
System.Web.HttpContext.Current.Session[key] = valueIn;
}
}
}