NHibernate Fluent加入多对一关系的映射

时间:2013-07-19 10:29:46

标签: nhibernate join mapping fluent

我正在尝试从NHibernate中获取一组只读对象,其中所有属性都来自单个表(Answers),除了来自另一个表的一个属性({{1在多对一的关系中。它是两个表的事实是我想隐藏的实现细节,所以我希望存储库返回一个合理的聚合。问题是这需要我有两个类,每个表一个,NHibernate返回,然后我必须选择/映射到我的存储库返回的第三个类。这感觉有点垃圾,所以我希望有一个映射,为我加入两个表,但将所有列映射到一个类。我的映射看起来像这样:

Questions

这个生成的SQL看起来很完美并且完全返回我想要的内容,但是当有多个Answers连接到Questions表中的同一行时,NHibernate似乎错误地将它们映射到对象 - 我得到了正确数量的结果,但是所有具有共同问题的答案都会与该问题的sql结果中的第一行一起使用。

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

1 个答案:

答案 0 :(得分:1)

因为加入意味着这样。它假设两个表之间存在一对一的关联,而不是这种情况。

而不是映射的实体,我会优先考虑飞行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();