nhibernate lazyload создает новую isession

Могу ли я предотвратить nhibernate, создавая новые сессии ISession при отложенной загрузке? Как?

Исправление: я имею в виду новые IDbConnections. Я реализовал свой собственный DriverConnectionProvider и вижу, что он вызывается из-за отложенной загрузки

2 ответа

Решение

Если вы используете NHibernate как менеджер соединений и генератор SQL. Т.е. у вас много кода вроде следующего:

public IList<Entity> GetEntities()
{
    using (ISession session = CreateNewSession())
    {
        return session.List<Entity>();
    }
}

Тогда вы не можете использовать ленивую загрузку. Так что вам нужно будет отключить отложенную загрузку. Это может быть легко достигнуто путем указания default-lazy="false" на вашем теге отображения hibernate http://nhibernate.info/doc/nh/en/index.html

Я мог бы рекомендовать использовать IStatelessSession вместо ISession по умолчанию. Имейте в виду, что это не рекомендуемое использование NHibernate.

NHibernate не создает никаких ISession по своей инициативе. Пожалуйста, опубликуйте пример, в котором вы чувствуете, что это произошло. Базовое соединение фактически открывается во время отложенной выборки только потому, что NH должен подключиться к базе данных, чтобы заполнить отложенные коллекции / ассоциации.

Другие вопросы по тегам