Вопрос по fluent-nhibernate, asp.net-mvc, lazy-loading, c#, nhibernate – NHibernate.LazyInitializationException

7

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

NHibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed

Эта ошибка возникает в другой коллекции объекта. Если я добавлю:

.Not.LazyLoad ()

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

NHibernate.LazyInitializationException: Could not initialize proxy - no Session.

Итак, затем я снял с себя ленивую загрузку и теперь вернулся к исходной точке. Это только ошибки, когда я увеличиваю этот счетчик просмотров. Вот фрагмент моего кода сохранения базового класса:

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");
stackoverflow.com/questions/1117633/… Мой вопрос похож. Daniel A. White

Ваш Ответ

2   ответа
1

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

В моей ситуации я загружал на страницу несколько других объектов, и эти объекты не были правильно отображены. Когда я вызвал Save, NHibernate попытался бы синхронизироваться в сеансе и выдать ошибку.

Попробуйте удалить все остальные NHibernate, оставив только это обновление счетчика. Если ошибка не возникает только с помощью счетчика, медленно добавляйте другие вызовы, пока ошибка не вернется. Тогда вы можете начать обращаться к настоящему преступнику.

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

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

Похожие вопросы