为什么NHibernate 3 Query没有SQL?

时间:2010-10-13 18:23:22

标签: linq-to-nhibernate

为什么在运行Nhibernate 3查询时没有生成SQL?

    public IQueryable<Chapter> FindAllChapters()
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            var chapters = session.QueryOver<Chapter>().List();

            return chapters.AsQueryable();
        }
    }

如果我运行下面的查询,我可以看到创建的SQL。

    public IQueryable<Chapter> FindAllChapters()
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            var resultDTOs = session.CreateSQLQuery("SELECT Title FROM Chapter")
                    .AddScalar("Title", NHibernateUtil.String)
                    .List();

            // Convert resultDTOs into IQueryable<Chapter>
        }
    }

1 个答案:

答案 0 :(得分:3)

Linq to NHibernate(如Linq to entities)使用延迟执行。您正在返回IQueryable<Chapter>,这意味着您可以在使用数据之前添加进一步的过滤,因此不会执行任何查询。

如果你调用了.ToList()或.List()(我忘记了API中的那个),那么它实际上会产生数据并执行查询。

换句话说,现在你有一个未执行的查询。

已添加:还使用Query()而非QueryOver()。 QueryOver就像是分离标准。

有关详细信息,请点击“{3}}

等文章的”延迟执行linq“