使用DTO集合NHibernate查询DTO

时间:2012-06-05 12:49:22

标签: nhibernate alias fetch dto

我有ObjectA(带有相应的ObjectADTO)和ObjectB的集合(带有相应的ObjectBDTO)。 如何通过ObjectB上的连接查询所有ObjectA并将它们映射到DTO中? 我真的不想查询db中的所有内容。

    class ObjectA {
        public string Name { get; set; }
        public byte[] Garbage { get; set; }
        public IEnumerable<ObjectB> Collection { get; set; }
    }

    class ObjectB {
        public string Name { get; set; }
        public byte[] Garbage { get; set; }
        public ObjectA Parent { get; set; }
    }

// MAPS to =&gt;

    class ObjectADTO {
        public string Name { get; set; }
        public IEnumerable<ObjectBDTO> Collection { get; set; }
    }

    class ObjectBDTO {
        public string Name { get; set; }
        public ObjectADTO Parent { get; set; }
    }

1 个答案:

答案 0 :(得分:0)

可以这样做:

ObjectB objectBAlias = null;
var query = _session.QueryOver<ObjectA>()
.JoinAlias(x=>x.Collection, ()=> objectBAlias, JoinType.LeftOuterJoin)
.List();

var list = query.Select(x=>new ObjectADTO
{
   Name=x.Name,
   Children=x.Collection.Select(c=>new ObjectBDTO {Name=c.Name, Parent=x).ToList()
})
.ToList();

没有检查VS中的语法,但是你明白了