是否可以在NHibernate中智能地映射DTO?

Ori*_*gin 0 nhibernate fluent-nhibernate

如果我想从类的属性创建DTO,所有这些都被映射,我可以不编写常规SQL语句吗?

我已经看过很多关于制作DTO课程以及使用它的文档,但关于它是如何创建的并不多.我见过与Transformer一起使用的SQL查询,但这需要使用魔术字符串.

编辑:

感谢您的评论.我知道有多种方法可以检索DTO,但我一直无法找到不使用SQL/HQL的方法示例.是否有某个地方的参考,或者这是NHibernate稀疏记录的区域之一?

Rip*_*ppo 5

从您最新的评论中可以看出使用QueryOver和投影DTO的一些示例Linq

使用QueryOver: -

var schoolList = Session.QueryOver<lmschool>()
         .SelectList(i => i
         .Select(p => p.Name).WithAlias(() => dto.Name)
         .Select(p => p.Lat).WithAlias(() => dto.Lat)
         .Select(p => p.Lng).WithAlias(() => dto.Lng)
       )
       .Where(w => w.Lat != null && w.Lng != null)
       .TransformUsing(Transformers.AliasToBean<MarkerDto>())
       .List<MarkerDto>();
Run Code Online (Sandbox Code Playgroud)

使用NH Linq提供商: -

var schoolList = (from school in Session.Query<lmschool>()
        .Where(w => w.Lat != null && w.Lng != null)
      select new LmSchoolMarkerDto {
            Name = school.Name,
                    Lat = school.Lat,
                    Lng = school.Lng,
      }).ToList();
Run Code Online (Sandbox Code Playgroud)

来自我的博客. 如果您需要查看如何使用多个联接,请参阅此博客文章.

还有很多SO帖子可以帮到你,看看这个搜索.