ルートエンティティを読み込み、子コレクションと集約メンバのすべてを読み込みたいと思います。NHibernateで子コレクションを読み込むことを熱心におこなう
FluentNHibernateでSetFetchMode
を使用しようとしましたが、3レベルの深さがあるため、子コレクションの1つに重複があります。 DistinctRootEntityResultTransformer
は残念ながらルートの重複だけを削除します。
return Session.CreateInvoiceBaseCriteria(query, archived)
.AddOrder(new Order(query.Order, query.OrderType == OrderType.ASC))
.SetFetchMode("States", FetchMode.Eager)
.SetFetchMode("Attestations", FetchMode.Eager)
.SetFetchMode("AttestationRequests", FetchMode.Eager)
.SetFetchMode("AttestationRequests.Reminders", FetchMode.Eager)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.List<Invoice>();
これをアーカイブするには複数のクエリなどを使用できますか?
さらに、このアプローチではデータベースから不必要に大きな結果セットが得られないでしょうか?
提案がありますか?
確かにいい記事ですが、自分の状況に適用できるかどうかは不明です。特定のルートエンティティを読み込むことについて熱心な記事で説明されている解決策、私の問題は、ルートエンティティのコレクションを熱心にロードしたいということです。 MultiCriteraを使用する場合は、特定のエンティティを指定せずにすべての異なるクエリを接続する方法を見つける必要があります。どのようにそれを行うことができます提案? – Kristoffer
この例では階層レベルは1つしかありませんが、孫がいないため、MultiQuery/MultiCriteriaはあまり役に立たないようです。後のクエリはクエリ#1のように以前のクエリの結果を参照できないためです。 where ... ...クエリー#2:c)にparentがある孫gを選択します。 –