Ленивый поиск словарного значения с использованием сеанса без сохранения состояния

StackOverflow https://stackoverflow.com/questions/4777278

Вопрос

В моем приложении я настроил картирование тройного словаря, чтобы для данного пользователя я мог получить «параметры» для каждого экземпляра объекта, который принадлежит пользователю. То есть у меня есть что -то вроде:

public class User
{
    public virtual IDictionary<Baz, BazSettings> BazSettings { get; set; }

    //...

Поэтому, когда у меня есть Baz объект, я могу найти настройки BAZ текущего пользователя через currentUser.BazSettings[baz].

Я хотел бы иметь возможность использовать сеанс без сохранения состояния для этого, но я получаю LazyInitializationException С этим кодом:

//int bazId;
using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession())
{
    var currentUser = session.Get<User>(Membership.GetUser().ProviderUserKey);
    var baz = session.Get<Baz>(bazId);
    var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException`

Когда я использую вместо этого ISession, тогда проблема исчезает.

Полное сообщение об ошибке nhibernate включает в себя текст «Не было закрыто сеанс или сеанс». Это имеет смысл, потому что при использовании сеанса без сохранения субъекты не подключены к сеансу. Тем не менее, я думаю, что есть способ использовать сеанс без сохранения состояния для выполнения этого поиска.

Как использовать сеанс без сохранения состояния для выполнения поиска currentUser.BazSettings[baz]?

Это было полезно?

Решение

Сессии без гражданства не поддерживают ленивую загрузку, точно потому, что они без гражданства: Они не отслеживают что-либо о объектах, полученных с ними.

Единственный способ заставить его работать - это стремление загрузить коллекцию. Но почему ты хочу Чтобы использовать сеансы без сохранения состояния, если они явно не предоставляют то, что вам нужно?

Другие советы

Вы должны использовать ISession вместо беззавольной системы, потому что операции, выполняемые с использованием сеанса без сохранения состояния, не каскада для связанных экземпляров, а коллекции игнорируются сеансом без сохранения состояния.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top