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

时间:2012-02-16 05:33:34

标签: nhibernate fluent-nhibernate

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

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

修改

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

2 个答案:

答案 0 :(得分:5)

根据您最新的评论,这里有一些使用QueryOverLinq

投影DTO的示例

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

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

来自my blog 此外,如果您需要查看如何使用多个联接,请参阅此blog post

还有很多S.O.可以帮助您的帖子,请参阅此search

答案 1 :(得分:0)

您可以加载所有必需的实体并使用AutoMapper将它们更容易地映射到DTO吗?