我正在尝试从NHibernate中获取一组只读对象,其中所有属性都来自单个表(Answers
),除了来自另一个表的一个属性({{1在多对一的关系中。它是两个表的事实是我想隐藏的实现细节,所以我希望存储库返回一个合理的聚合。问题是这需要我有两个类,每个表一个,NHibernate返回,然后我必须选择/映射到我的存储库返回的第三个类。这感觉有点垃圾,所以我希望有一个映射,为我加入两个表,但将所有列映射到一个类。我的映射看起来像这样:
Questions
这个生成的SQL看起来很完美并且完全返回我想要的内容,但是当有多个Answers连接到Questions表中的同一行时,NHibernate似乎错误地将它们映射到对象 - 我得到了正确数量的结果,但是所有具有共同问题的答案都会与该问题的sql结果中的第一行一起使用。
我这样做是对的吗? NH正在生成正确的SQL,为什么它构建我的对象错误?
答案 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();