NHibernate DTO 映射

标签 nhibernate mapping

  • 是否可以为 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/

    相关文章:

    java - 性能和 hibernate

    html - SVG - 带有图像背景的图案 - 图像填充不同 - 适应它们包含的形状

    c# - Fluent NHibernate - 添加鉴别器时出现问题

    延迟加载集合/级联的 NHibernate 拦截器/ Hook

    sqlite - nHibernate 3.0.0.4000 在查询中以不同方式处理 bool 值?

    java - 在域模型中处理大型集合的好方法 - 使用 JPA/Hibernate ORM?

    node.js - 我的 docker 容器在哪个端口上运行着 React 应用程序? Reacts 的默认 PORT 或来自 Dockerfile 的 EXPOSE?

    mapping - 将经度转换为米

    .net - 一个事务中的多个 NHibernate session

    c# - nhibernate 使用先前的状态创建