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