在使用NHibernate的时候,我们经常会发现需要使用sql语句来查询某些关系比较复杂的表,通常使用sql语句查询出的结果集需要转换成实体的集合形式,进行过滤和序列化展示等操作。Nhibernate已经为我们提供了非常方便的方法,示例如下:
首先我们需要一个实体类
假设A表中有字段A1,A2,A3,B表中有字段B1,B2,B3
public class ReportModel
{
<span style="white-space:pre"> </span>public string A1 { get; set; }
<span style="white-space:pre"> </span>public string A2{ get; set; }
<span style="white-space:pre"> </span>public string A3{ get; set; }
<span style="white-space:pre"> </span>public string B1{ get; set; }
<span style="white-space:pre"> </span>public string B2{ get; set; }
<span style="white-space:pre"> </span>public string B3{ get; set; }
}
查询代码
var sql = "select * from A,B";
ISession session = SessionFactory.OpenSession();
IQuery query =session.CreateSQLQuery(sql)
.AddScalar("A1", NHibernateUtil. String)
.AddScalar("A2", NHibernateUtil.String)
.AddScalar("A3", NHibernateUtil.String)
.AddScalar("B1", NHibernateUtil.String)
.AddScalar("B2", NHibernateUtil.String)
.AddScalar("B3", NHibernateUtil. String)
.SetResultTransformer(Transformers.AliasToBean< ReportModel >());
result =query.List< ReportModel >();
OK,核心代码只有这么多,非常简单。这些使用方法在nhibernate的api文档中有相当详细的描述,这里就不再复述。