В моем приложении я настроил отображение троичного словаря так, чтобы для данного пользователя я мог получать «настройки» для каждого экземпляра объекта, который принадлежит пользователю. То есть у меня что-то типа:
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]
?