2012-02-16 62 views
0

如果我想从类的属性创建一个DTO,所有这些都被映射,我可以在不写常规SQL语句的情况下执行此操作吗?是否可以在NHibernate中智能地映射DTO?

我见过很多关于制作DTO类的文档,以及如何使用它,但没有太多关于它如何创建。我已经看到用于Transformer的SQL查询,但是需要使用魔术字符串。

编辑:

感谢您的意见。我知道有多种方法来检索DTO,但我一直无法找到不使用SQL/HQL的方法的示例。有没有参考的地方,或者是NHibernate那些稀少记录的领域之一?

+0

'我见过用于Transformer的SQL查询,但需要使用魔术字符串 - 这不是真的,您可以将HQL,SQL,Criteria,QueryOver和NH Linq转换为DTO ...什么版本NH你正在使用,当你聪明地说你是什么意思? – Rippo 2012-02-16 10:42:32

+0

“魔术串”并不意味着你认为它的意思 – 2012-02-16 14:01:40

+0

谢谢@Rippo的建设性反馈。我的问题的关键是要澄清我的选择是什么。 Criteria/Queryover/Linq是否有任何参考?我似乎无法找到任何。 – Origin 2012-02-16 16:29:19

回答

5

从这里你最新的评论是用QueryOverLinq

使用QueryOver突出的DTO的一些例子: - 使用NH LINQ提供

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

: -

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

+0

谢谢你的回应。这些例子正是我所期待的。巧合的是,我曾看过您的博客文章,并一直在引用它。大多数我在SO上看到关于使用NHibernate的DTO的帖子都是一般性问题,假设每个人都已经知道如何检索它们。 – Origin 2012-02-17 15:56:07

0

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

+0

AutoMapper是否可以与现有的数据库结构一起工作? – Origin 2012-02-16 16:38:33