5
  1. 是否可以为 DTO 对象创建映射然后查询它们而不是域?如果不解释为什么?
  2. 如果我需要几个 dto 怎么办?

  • DTos 是只读的
  • ID 由 NH 自动生成
  • 将来,这些 dto 将设置映射到链接的 dto。
  • 我使用 DTO 来减少查询大小

    <class name="Person" table="`APP_Person`">  
        <property name="FirstName" type="string" length="512" />
        <property name="Age" type="int" /> 
        <property name="SocialNumber" type="int" />
        <property name="PassportId" type="int" />
        <property name="Salary" type="int" />
    </class>
    
    <class  name="PersonDTO" table="`APP_Person`">  
        <property name="FirstName" type="string" length="512" />
        <property name="Age" type="int" />
    </class>
    
4

1 回答 1

10

您不需要映射/持久化DTO对象。通常只读数据并发送到应用程序的其他层(Web 服务、视图等)。

您可以对返回列表的Person实体创建查询。PersonDTO看看SetResultTransformer方法。尝试这样的事情:

var query = session.CreateQuery("select p.FirstName, p.Age from Person p order by p.FirstName")
                   .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(PersonDTO)))
                   .List<PersonDTO>();

还有你的 DTO:

public class PersonDTO 
{
   public string FirstName { get; set; }
   public int Age { get; set; }
}

查询列的结果hql应该与 DTO 的属性具有相同的名称,以便 NHibernate 在构造 DTO 和水合对象时进行正确的反射。

林克

作为结果,您还可以使用linqDTO或 DTO 列表)。样品:

var query = Session.Query<Person>().OrderBy(x => x.FirstName)
                   .Select(x = new PersonDTO() { FirstName = x.FirstName, Age = x.Age })
                   .ToList();

看这篇文章: http: //gustavoringel.blogspot.com.br/2009/02/creating-dto-in-nhibernate-hql-using.html

于 2012-12-05T14:21:19.007 回答