而不是域?如果不解释为什么?
<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>
最佳答案
您不需要映射/保留 DTO
目的。只读数据并发送到应用程序的其他层(Web 服务、 View 等)是正常的。
您可以在 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 列表)作为结果。 sample :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
关于NHibernate DTO 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724546/