我使用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>
答案 0 :(得分:9)
您无需映射/保留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并对对象进行水合时进行正确的反射。
您还可以使用linq
来获得DTO
(或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