У нас время от времени возникала эта проблема, но теперь я могу воспроизводить ее каждый раз. Я увеличиваю счетчик просмотров на своих настраиваемых форумах, что вызывает ошибку:
NHibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию, сеанс или сеанс не был закрыт
Эта ошибка возникает в другой коллекции в объекте. Если я добавлю:
.Not.LazyLoad ()
В моем сопоставлении Fluent ошибка смещается вокруг моего проекта. Я продолжал отключать ленивую загрузку объектов, пока они не переместились в место, где не было ленивой загрузки, а затем он выдал эту ошибку:
NHibernate.LazyInitializationException: не удалось инициализировать прокси - нет сеанса.
Итак, затем я удалил замечания по моей ленивой загрузке, и теперь я вернулся к исходной точке. Это только ошибки, когда я увеличиваю этот счетчик просмотров. Вот фрагмент моего кода сохранения базового класса:
using (ISession session = GetSession())
using (ITransaction tx = session.BeginTransaction())
{
session.SaveOrUpdate(entity);
tx.Commit();
}
Оглядываясь вокруг, я прочитал в другом посте, что транзакции могут вызвать проблему, но это было из-за того, где они были размещены. Этот код распространяется на классы, которые отделены от объектов моей предметной области (классы репозитория). Вот сообщение:
hibernate: LazyInitializationException: не удалось инициализировать прокси
Я не думаю, что это моя проблема. Вот мое беглое отображение для первой коллекции, которая выдает ошибку. Есть еще несколько подобных коллекций.
HasManyToMany(x => x.Votes)
.WithTableName("PostVotes")
.WithParentKeyColumn("PostId")
.WithChildKeyColumn("VoteId");