为什么在运行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>
}
}
答案 0 :(得分:3)
Linq to NHibernate(如Linq to entities)使用延迟执行。您正在返回IQueryable<Chapter>
,这意味着您可以在使用数据之前添加进一步的过滤,因此不会执行任何查询。
如果你调用了.ToList()或.List()(我忘记了API中的那个),那么它实际上会产生数据并执行查询。
换句话说,现在你有一个未执行的查询。
已添加:还使用Query()而非QueryOver()。 QueryOver就像是分离标准。
有关详细信息,请点击“{3}}
等文章的”延迟执行linq“