是否可以使用NHibernate调用存储过程,它返回自定义对象而不是域对象?

时间:2013-02-07 12:19:37

标签: nhibernate stored-procedures nhibernate-mapping

我有几个不返回域对象的存储过程(即在hbm文件中具有相应sql表映射的对象);但改为返回自定义对象。

我想使用NHibernate调用这些存储过程并自动填充我的自定义对象,而不是像我使用SqlDataReader那样手动填充它们。

应高度赞赏一个例子。

BTW:我使用nhibernate 3.2新功能按代码映射。

1 个答案:

答案 0 :(得分:5)

也许您可以尝试以下内容(取自https://stackoverflow.com/a/10513319/1236044

它使用CreateSQLQuery。您可以尝试将select...替换为Exec MyStoredProc

关键是让您的选择或存储过程返回列,其名称与您尝试填充的DTO的属性相同。

public class YourDto
{
    public int YourDtoId { get; set; }
    public string YourDtoTitle { get; set; }
}

then

var result = yourNhSession
    .CreateSQLQuery("select yourColumn1 as YourDtoId, yourColumn2 as YourDtoTitle from YOUR_TABLE")
    .SetResultTransformer(Transformers.AliasToBean<YourDto>())
    .List<YourDto>();