Ленивый поиск значения словаря с использованием сеанса без сохранения состояния - PullRequest
3 голосов
/ 24 января 2011

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

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

    //...

Поэтому, когда у меня есть объект 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]?

Ответы [ 2 ]

0 голосов
/ 24 января 2011

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

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

0 голосов
/ 24 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...