【问题标题】:NHibernate - Execute SQL to populate DTONHibernate - 执行 SQL 来填充 DTO
【发布时间】:2012-05-17 15:54:24
【问题描述】:

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

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

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

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

干杯

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    使用 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>();
    

    【讨论】:

    • 这很好用,但不适用于命名查询,因为 nh 在启动时构建配置时会验证命名查询中使用的类,并且需要了解 DTO。如果没有其他人有解决方案,将修改代码以使用它。谢谢
    【解决方案2】:

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

    【讨论】:

    • @Chev 它是,是一个很好的 NH 伴侣,并且由于它消除了 NH 的大量管道,它正在快速变亮。
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2020-12-17
    • 2023-04-11
    • 2013-01-01
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多