多对一关系的NHibernate连接映射

多对一关系的NHibernate连接映射,nhibernate,join,mapping,fluent,Nhibernate,Join,Mapping,Fluent,我试图从NHibernate获取只读对象的集合,其中所有属性都来自一个表(答案),除了一个属性来自多对一关系中的另一个表(问题)。事实上,它有两个表,这是我想要隐藏的一个实现细节,因此我希望存储库返回一个合理的聚合。问题是这需要我有两个类,每个表一个,NHibernate返回,然后我必须选择/映射到存储库返回的第三个类。这感觉有点垃圾,所以我希望能有一个映射来连接两个表,但将所有列映射到一个类上。我的映射如下所示: public QuestionAnswerMap() { ReadOnl

我试图从NHibernate获取只读对象的集合,其中所有属性都来自一个表(
答案
),除了一个属性来自多对一关系中的另一个表(
问题
)。事实上,它有两个表,这是我想要隐藏的一个实现细节,因此我希望存储库返回一个合理的聚合。问题是这需要我有两个类,每个表一个,NHibernate返回,然后我必须选择/映射到存储库返回的第三个类。这感觉有点垃圾,所以我希望能有一个映射来连接两个表,但将所有列映射到一个类上。我的映射如下所示:

public QuestionAnswerMap()
{
    ReadOnly();
    Table("Question");

    Id(x => x.Id).Column("questionId").GeneratedBy.Identity();
    Map(x => x.AnswerShortCode).Column("AnswerShortCode");

    Join("Answers", join =>
        {
            join.Fetch.Join();
            join.KeyColumn("questionId").Inverse();
            join.Map(x => x.QuestionId).Column("QuestionId");
            join.Map(x => x.AnswerId).Column("AnswerId");
            join.Map(x => x.MemberId).Column("MemberId");
        });
 }
它生成的SQL看起来很完美,返回的结果正好是我想要的,但是当有多个答案连接到问题表中的同一行时,NHibernate似乎错误地将它们映射到了对象-我得到了正确数量的结果,但是,所有有一个共同问题的答案都会与该问题的sql结果中的第一行结合在一起


我这样做对吗?NH正在生成正确的SQL,那么为什么它构建我的对象是错误的呢?

因为Join就是这样的。它假设两个表之间存在一对一的关联,但事实并非如此

我更喜欢动态Dto,而不是映射实体:

var query = session.Query<Answer>()
    .Where(answer => ...)
    .Select(answer => new QuestionAnswer
    {
        QuestionId = answer.Question.Id,
        AnswerShortCode = answer.Question.AnswerShortCode,
        AnswerId = answer.Id,
        MemberId = answer.MemberId,
    });


return query.ToList();
var query=session.query()
.其中(答案=>…)
.选择(答案=>新问题答案
{
QuestionId=答案.Question.Id,
AnswerShortCode=answer.Question.AnswerShortCode,
AnswerId=answer.Id,
MemberId=answer.MemberId,
});
返回query.ToList();