乐队没有,一个或几个成员 会员没有,一个或几个工具。
QueryOver<Band>()
.WithSubquery.WhereProperty(x => x.BandId).In(bandIds)
.Left.JoinQueryOver<Member>(x => x.Members)
.Left.JoinQueryOver<Instrument>(x => x.Instruments)
.TransformUsing(Transformers.DistinctRootEntity)
.List();
以上几乎可行。问题是,如果有多个仪器我们也会得到那么多成员(笛卡尔积)。
示例
Band - 1, gets 1
Member - 1, gets 2
Instrument - 2, gets 2
急切地提取映射,我们希望避免N + 1问题。
HasMany(x => x.Members).KeyColumn("BandId").Fetch.Join().Inverse();
有没有办法让NHibernate来处理这个问题?