Есть идеи по оптимизации этого запроса NHibernate?(.Будущее) - PullRequest
2 голосов
/ 15 сентября 2010

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

Кто-нибудь знает какие-либо лучшие практики для такого рода вещей? У меня есть много сценариев, где я вызываю метод в LINQ, который получает данные с помощью NHibernate, но я не хочу возвращать загрузки данных это не обязательно.

Способ получения всех книг:

public IEnumerable<Book>GetAllBooks()
        {
            try
            {
                using (ISession session = NHibernateHelper.OpenSession())
                {
                    return session.CreateCriteria<Widget>().ToList<Book>();
                }
            }
            catch (Exception ex)
            {
                //Error stuff here 
            }
        }

Метод, расширяющий эту функциональность

        public IEnumerable<Book> GetDefaultBookReadingList()
        {
            return from p in GetAllBooks()
                   where p.IsDefault
                   select p;
        }

1 Ответ

1 голос
/ 15 сентября 2010

Как только вы закроете сеанс (что происходит в конце вашего блока using), вы не сможете получить какие-либо загруженные данные с отложенной загрузкой.

В зависимости от типа приложения, управление сеансами будет различным, но хранилище НИКОГДА не должно открывать и закрывать сеансы.

В веб-приложениях наиболее распространенным шаблоном является сеанс на запрос.

В приложениях Windows это может быть транзакция разговора на бизнес или, в более простых реализациях, сеанс на просмотр (модель)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...