Доступ к отложенному загруженному свойству в коде NHibernate ASP.NET MVC3 - PullRequest
0 голосов
/ 11 декабря 2011

У меня есть класс Post:


public class Post
{
    ...
    public virtual IList<Comment> Comments { get; set; }
    ...
}

В сопоставлениях я установил Комментарии как ссылку на ManyToOne.Как мы знаем, по умолчанию он установлен как загруженный с отложенной загрузкой.

В моем скрипте просмотра Razor я хочу проверить, есть ли в комментарии какие-либо комментарии, и если да, добавьте кнопку, которая вызывает действие для получения комментариев к этой записи через ajaxи показать их, введя html.
Когда я пытаюсь вызвать что-то на Post.Comments в Razor (например, Model.Comments.Count ()), я получаю исключение, в котором говорится, что Session отсутствует.Я знаю, почему это происходит - потому что ленивая загрузка.
Мой вопрос, как справиться с такими ситуациями?Каковы «лучшие практики»?

Мне приходит в голову два решения:
1) Сделать комментарии загруженными не лениво - не нормально, так как я получаю комментарии через ajax позже, и на этот раз мне нужны толькоКоличество комментариев 2) Создайте класс ViewModel, который содержит информацию, если у публикации есть комментарии, или передайте ее через ViewBag.

Что вы предлагаете по этому поводу?

Спасибо, Bartek

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

Лично я бы выбрал вариант 2.

Создайте модель представления, включите свойство, подобное HasComments, и используйте его в своем представлении вместо попытки оценить Model.Comments.Count().

1 голос
/ 11 декабря 2011

Почему ваша сессия заканчивается так рано?

Вы должны держать его открытым во время рендера, в такие моменты.

...