我是一个NHibernate新手,我正在接受另一个开发人员编写的代码。我想了解NHibernate如何将基于lambda的标准转换为SQL。
我知道在Linq to SQL中使用查询上的Lambda表达式意味着Linq to SQL提供程序将整个事物转换为表达式树,然后转换为SQL(如果可能)。这可以通过DataContext.Log = Console.Out。
来看出但是如果没有使用Linq到NHibernate的NHibernate标准表达式呢?
导入以下命名空间......
using NHibernate;
using NHibernate.Criterion;
using NHibernate.LambdaExtensions;
..标准代码看起来像这样......
return Session.CreateCriteria<MyObjectType>()
.Add<MyObjectType>(x => x.Id == id)
.UniqueResult<MyObjectType>();
这会变成一个SQL语句,例如
Select distinct * from table where id = [param]
...或者将整个数据集拉入内存,给出List,然后对对象应用lambda表达式。 e.g。
return List<MyObject>.Where(x => x.id = id) [or something similar].
我不确定导入的NHibernate.LambdaExtensions是否提供了对SQL的一种翻译。
答案 0 :(得分:1)
首先转向HQL语句(启用日志记录并查看语句的控制台),然后转到SQL并发送到数据库。
它没有选择整个表到内存并过滤那里。