流畅的NHibernate - '懒得初始化一个集合' - 查询集合

时间:2011-04-29 23:07:10

标签: c# nhibernate asp.net-mvc-3 fluent-nhibernate

我有一个自引用模型类:

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的单词的所有同义词,并在我的MVC 3应用程序中返回JSON格式的单词列表:

[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 个答案:

答案 0 :(得分:1)

在操作完成并且在会话之外之后,结果执行得更晚。您返回Json(results)这一事实并不意味着这些结果会立即序列化为JSON。该操作将首先完成执行,然后ASP.NET MVC管道将处理结果的执行(OnResultExecuting),此时JavaScriptSerializer将触摸集合。那时会话和交易早已不复存在。

因此,要么指示您的ORM急切地获取依赖集合,要么更好地查看following series of blog posts并使用视图模型。

答案 1 :(得分:-1)

要摆脱错误,请安装Nuget Pacakage Manager Newton.JSON并映射到相应的项目并使用[JsonIgnore]装饰属性,这将跳过序列化问题,您将不会收到错误。< / p>