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 должен подключиться к базе данных, чтобы заполнить отложенные коллекции / ассоциации.