NHibernate - 执行SQL来填充DTO

时间:2012-05-09 06:36:20

标签: nhibernate fluent-nhibernate

我有一些实例用于报告执行的sprocs比复杂的QueryOver语句更容易和简单。

我有一个DTO,而不是一个实体,它代表从查询返回的数据,并希望将查询结果填充到DTO中。我正在使用命名查询和session.GetNamedQuery()来执行查询。

  1. 我是否必须为DTO创建映射文件?
  2. 如果是这样,是否可以让NHibernate / FluentNHibernate知道它不应该为DTO创建表?我的单元测试使用NH的SchemaExport工具删除并创建模式,并且不想为DTO创建表
  3. 请注意我不想使用Projections和AliasToBean投影QueryOver / Linq查询 - 我需要执行存储过程。

    干杯

2 个答案:

答案 0 :(得分:11)

使用CreateSQLQuery,以下内容可以在没有任何映射文件的情况下工作。也许您可以尝试使用命名查询:

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

然后

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

答案 1 :(得分:2)

如果您想要最简单的解决方案,我建议您在架构中添加一个像Dapper这样的微/ orm来执行此操作。它只是在您的项目中删除single file并按照示例进行操作。为了对我来说,当你必须做出因某种原因出于实体逻辑的事情时,它是与NH配对的最佳解决方案。