予想よりも多くの結果を返す単純なNhibernateLinqクエリがあります。
var result = (from foo in session.Linq<Foo>()
where foo.High.ID == High.ID
select foo).ToArray();
Fooは次のようになります。
public class Foo : DomainLayerSuperType
{
// ...other members omitted for clarity
protected IList<Bar> associatedBars;
}
私の問題は、「associatedBars」コレクション内のすべてのバーに対して重複したFooを取得することです。したがって、Fooのインスタンスのコレクションに20個のバーがある場合、それぞれ20個のバーを持つ20個のFooインスタンスを取得します。
Fooのマッピング:(FluentNhibernate)
//other mappings omitted
HasMany<Bar>(x => x.AssociatedBars)
.Access.CamelCaseField()
.AsBag()
.Table("dbo.Bar")
.KeyColumn("FooID")
.Cascade.AllDeleteOrphan()
.Inverse()
.Fetch.Join(); //eager load
この同等のHqlクエリを実行しても、問題は発生しません。
var query = new StringBuilder();
query.AppendFormat("select foo from Foo foo where foo.High.ID = {0}", High.ID);
var result = session.CreateQuery(query.ToString()).List<Foo>().ToArray();
また、Fooのマッピングを変更して、AssociatedBarsの遅延読み込みを使用しても、問題は発生しません。
何か案は?また、Nh Linqの最高のフォーラムはどこですか?見つからなかったのでここに投稿しました!