Я использую NHibernate для запроса списка объектов из моей базы данных. После того, как я получил список объектов над ними, я перебираю список объектов и применяю алгоритм приближения расстояний, чтобы найти ближайший объект. Я рассматриваю эту функцию получения списка объектов и применяю алгоритм над ними как сложную операцию, поэтому я кеширую объект, который я нахожу из алгоритма в HttpRuntime.Cache
.
После этого момента всякий раз, когда мне снова вводят введенные данные, я могу просто извлекать объект из кэша, вместо того, чтобы попадать в базу данных и просматривать список. Мой объект является сложным объектом, к которому прикреплены коллекции, в запросе, где я возвращаю полный список объектов, я не возвращаю ни одну из вложенных коллекций, поэтому, когда я читаю свой кэшированный объект, мне нужна ленивая загрузка для правильной работы чтобы иметь возможность полностью отобразить объект.
Первоначально я пытался использовать это для повторного связывания моего кэшированного объекта с новым сеансом
_session.Lock(obj, LockMode.None);
Однако при одновременном доступе к странице из другого экземпляра я получаю сообщение об ошибке
Незаконная попытка связать
сборник с двумя открытыми сессиями
Затем я попробовал что-то другое с
_session.Merge(obj);
Однако просмотр результатов этого в NHProf показывает, что он удаляет и повторно связывает содержащиеся в моем наборе коллекции моего объекта с моим объектом, а это не то, чего я хочу, хотя, похоже, он работает нормально.
Как правильно это сделать? Ни один из них, кажется, не прав.