Свободный NHibernate - «не удалось лениво инициализировать коллекцию» - Запросы коллекции - PullRequest
1 голос
/ 30 апреля 2011

У меня есть класс ссылочной модели:

public class Word
{
    public virtual int Id { get; set; }
    public virtual string Text { get; set; }
    public virtual IList<Word> Synonyms { get; set; }
    public virtual int Extra { get; set; }
}

Я пытаюсь запросить все синонимы слова, где Extra равно 1, и возвращает список слов в формате JSON в моем приложении MVC 3:

[HttpPost]
public JsonResult Synonyms(string wordText)
{
    using (var session = ...)
    {
        using (var tx = session.BeginTransaction())
        {
            var word = session.QueryOver<Word>()
                              .Where(w => w.Text == wordText)
                              .SingleOrDefault();

            var results = new SynonymsResults()
            {
                Words = word.Synonyms
                            .Where(x => x.Extra == 1)
                            .Select(x => x.Text)
            };

            return Json(results);
        }

    }
}

Я получаю сообщение об ошибке, что не удается лениво инициализировать коллекцию.Хотя я не уверен, почему, так как я все еще нахожусь здесь в той же сессии и даже использую транзакцию.

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

Результат выполняется гораздо позже, после завершения действия и вне сеанса.Тот факт, что вы вернули Json(results), не означает, что эти результаты будут немедленно сериализованы в JSON.Действие сначала завершит выполнение, затем конвейер ASP.NET MVC обработает выполнение до результата (OnResultExecuting), и именно в этот момент JavaScriptSerializer коснется коллекции.В этот момент сеансы и транзакции уже давно прошли.

Так что либо попросите ORM охотно получать зависимые коллекции, либо еще лучше взгляните на следующую серию сообщений в блоге и используйтепосмотреть модели.

0 голосов
/ 13 декабря 2016

Чтобы избавиться от ошибки, установите Nuget Pacakage Manager Newton.JSON и сопоставьте с соответствующим проектом и украсьте свойство с помощью [JsonIgnore], это пропустит проблемы с сериализацией, и вы не получите ошибку.

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