6

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

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

  1. 我必须为 DTO 创建映射文件吗?
  2. 如果是这样,是否可以让 NHibernate/FluentNHibernate 知道它不应该为 DTO 创建表?我的单元测试使用 NH 的 SchemaExport 工具删除并创建模式,并且不想为 DTO 创建表

请注意,我不想使用 Projections 和 AliasToBean 投影 QueryOver/Linq 查询 - 我需要执行存储过程。

干杯

4

2 回答 2

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>();
于 2012-05-09T09:28:50.770 回答
2

如果你想要最简单的解决方案,我建议你在你的架构中添加一个像Dapper这样的 micro/orm来做到这一点。它只是在您的项目中删除一个文件并按照示例进行操作。对我来说,当你不得不做一些出于某种原因超出实体逻辑的事情时,它是与 NH 配对的最佳解决方案。

于 2012-05-09T07:46:05.563 回答