nhibernate lazyload создает новую isession - PullRequest
0 голосов
/ 12 марта 2011

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

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

Ответы [ 2 ]

3 голосов
/ 12 марта 2011

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

0 голосов
/ 14 марта 2011

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

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

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

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

...