NHibernate(c#.net) - 自动将SQLQuery的结果映射到dto对象

时间:2012-06-19 12:04:09

标签: c# .net nhibernate

到目前为止(使用NHibernate)我已经使用了实体映射而没有真正参与创建原始sql查询 - 但有些事情出现在我需要做的地方。

我遇到的问题是我想自动将查询的列别名映射到Dto对象。

这样可行,但我必须按查询顺序指定列别名。

SQL

string sql = "select mycol1 as ColumnOne from mytable";

NHibernate查询

var query = session.CreateSQLQuery(sql)
            .AddScalar("ColumnOne", NHibernateUtil.Int32)
            .SetResultTransformer(
                  NHibernate.Transform.Transformers.AliasToBean<MyDtoObject>()
            );

MyDtoObject

 public class MyDtoObject 
 {
     public int ColumnOne {get;set;}
 }

但是有没有办法让NHibernate自动化查询中的列和Dto之间的映射而不创建映射类?

我见过一些在查询中使用别名的例子,例如

string sql = "select mycol1 as {ColumnOne} as ColumnOne from mytable"; /// ???

但是无法让这个工作,因为别名{ColumnOne}在作为sql语句发送到db之前似乎不会被替换。

有什么想法吗?

TIA

萨姆

1 个答案:

答案 0 :(得分:0)

也许System.Linq.Dynamic会提供帮助:

use System.Linq.Dynamic;

string ColumnAlisName = "ColumnOne";
var query = mytable.Select(String.Format("new (mycol1 as {0})",ColumnAlisName));