Nhibernate, no session or session was closed

197
08 апреля 2018, 23:21

Всем привет! Ошибка:

[LazyInitializationException: Initializing[DetalSt.Default.Models.MenuItem#13]-failed to lazily initialize a collection of role: DetalSt.Default.Models.MenuItem.MenuItems, no session or session was closed]
   NHibernate.Collection.AbstractPersistentCollection.ThrowLazyInitializationException(String message) +199
   NHibernate.Collection.AbstractPersistentCollection.ThrowLazyInitializationExceptionIfNotConnected() +70
   NHibernate.Collection.AbstractPersistentCollection.ReadSize() +59

Суть в том, что я пытаюсь дотянуться до коллекции сущностей в подгруженной сущности:

public class MenuItem : DetalSt.Default.Models.IEntity 
    {
        public virtual int Id { get; set; }
        public virtual string Uid { get; set; }
        public virtual string Header { get; set; }
        public virtual string Url { get; set; }
        public virtual int QueueNumber { get; set; }
        public virtual bool Main { get; set; }
        public virtual MenuItem Parent { get; set; }
        private IList<MenuItem> _menuItems;
        public virtual IList<MenuItem> MenuItems
        {
            get
            {
                return _menuItems ?? (_menuItems = new List<MenuItem>());
            }
            set { _menuItems = value; }
        }
    }

Разумеется, если я в маппинге укажу Not.LazyLoad(), то все получится.

Доп.инф. Сессий я управляю следующим образом:

    protected void Application_BeginRequest()
            {
                var unitOfWork = DependencyResolver.Current.GetService<IUnitOfWork>() as UnitOfWork;
                if (unitOfWork == null)
                    return;
                HttpContext.Current.Items.Add(nhSessionKey, unitOfWork);
                unitOfWork.OpenSession();
                unitOfWork.BeginTransaction();
            }
protected void Application_EndRequest()
            {
                var unitOfWork = HttpContext.Current.Items[nhSessionKey] as UnitOfWork;
                if (unitOfWork == null)
                    return;
                unitOfWork.Commit();
            }

UnitOfWork регистрирую в автофаке. Сессия на момент запроса есть, при этом падает с ошибкой, что её нет. Прошу помощи.

public class UnitOfWork : IUnitOfWork
    {
        private static readonly ISessionFactory _sessionFactory;
        private ITransaction _transaction;
        public ISession Session { get; private set; }
        static UnitOfWork()
        {
            _sessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2012.ConnectionString(@"").ShowSql())
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DetalSt.Default.Models.UserMap>())
            .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
            .BuildSessionFactory();
        }
    public void OpenSession()
    {
        Session = _sessionFactory.OpenSession();
    }
    public void BeginTransaction()
    {
        _transaction = Session.BeginTransaction();
    }
    public void Commit()
    {
        try
        {
            if (_transaction != null && _transaction.IsActive)
                _transaction.Commit();
        }
        catch
        {
            if (_transaction != null && _transaction.IsActive)
                _transaction.Rollback();
            throw;
        }
        finally
        {
            Session.Dispose();
        }
    }
    public void Rollback()
    {
        try
        {
            if (_transaction != null && _transaction.IsActive)
                _transaction.Rollback();
        }
        finally
        {
            Session.Dispose();
        }
    }
READ ALSO
C# ClosedXML определение конца листа

C# ClosedXML определение конца листа

ЗдравствуйтеВопрос: Использую библиотеку ClosedXML, никак не пойму и не могу найти как определить конец листа в файле Excel

167
Task и стабильность работы

Task и стабильность работы

Для многопоточной обработки без ожидания использую

152
Как выбрать элемент из IEnumerable?

Как выбрать элемент из IEnumerable?

В модели Book есть уникальный IdКак выбрать элемент из IEnumerable по Id=1?

198
Как лучше организовать обмен данными UDP?

Как лучше организовать обмен данными UDP?

Разрабатываю клиент-серверное приложение, где клиенты обмениваются данными в реальном времениНемного разобравшись в теме, выбрал наиболее...

196