Я использую NH для сопоставления БД с объектом с именем location
, который имеет некоторые свойства и в списке <Attachments>
вложений (отношение один ко многим с экземпляром lcocation
).
Я использую лямбда-выражение для инициализации location
istance:
public IList<T> GetAllByExpression(Expression<Func<T,bool>> expression)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return session.Query<T>().Where(expression).ToList();
}
}
на более позднем этапе кода, который я пытаюсь получить доступ к коллекции location.attachments
, но получаю исключение:
{"Initializing[Location#543c7367-08fa-4469-a252-8e2c6163be22]-failed
для ленивой инициализации коллекции ролей: Location.Attachments, ни один сеанс или сеанс не был закрыт "}
Я понимаю, что сеанс закрыт, но я ничего не могу сделать.
Я понимаю, что сессия закрыта, но я ничего не могу поделать.
У меня есть дилемма: 1) Код использует коллекцию после выборки из БД и ему нужно, чтобы сессия все еще оставалась открытой... оставлять сеанс открытым на все время - это плохая практика. (без using
).
2) Даже если я оставляю сеанс открытым в течение всего времени выполнения приложения, я создаю n-уровневую сетьприложение. DAL должен быть общим и не подвергать сомСеанс реализации (в данном случае NH).
3) Решение проблемы с загрузкой, похоже, является решением, но оно бесполезно - так как мне придется загружать все данные в случае объекта со списком другихобъекты в нем.(И это может продолжаться даже рекурсивно)
Что мне делать?
TIA