gpt4 book ai didi

NHibernate DTO 映射

转载 作者:行者123 更新时间:2023-12-04 17:23:58 27 4
gpt4 key购买 nike

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


  • DTos 是只读的
  • ID 由 NH 自动生成
  • 将来这些 dtos 将设置映射到链接的 dtos。
  • 我使用 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>
  • 最佳答案

    您不需要映射/保留 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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com