一気にロードしたいかなり複雑なオブジェクト グラフがあります。
サンプルには、デイログ結果を持つデイログ テストを持つデイログがあります。
Daylog テストには Testkeys があり、Daylog Results には Resultkeys があり、TestKeys には Resultkeys があります。
QueryOver API と Future を使用して、これらすべてを 1 つのクエリとして実行しています。グラフ全体をインスタンス化するために NHibernate が必要とするすべてのデータは、NHProf によって検証されて返されます。
public static IList<Daylog> DatablockLoad(Isession sess,
ICollection<int> ids)
{
var daylogQuery = sess.QueryOver<Daylog>()
.WhereRestrictionOn(dl => dl.DaylogID).IsIn(ids.ToArray())
.Fetch(dl => dl.Tests).Eager
.TransformUsing(Transformers.DistinctRootEntity)
.Future<Daylog>();
sess.QueryOver<DaylogTest>()
.WhereRestrictionOn(dlt =>
dlt.Daylog.DaylogID).IsIn(ids.ToArray())
.Fetch(dlt => dlt.Results).Eager
.Inner.JoinQueryOver<TestKey>(dlt => dlt.TestKey)
.Fetch(dlt => dlt.TestKey).Eager
.Inner.JoinQueryOver<ResultKey>(tk => tk.Results)
.Fetch(dlt => dlt.TestKey.Results).Eager
.Future<DaylogTest>();
sess.QueryOver<DaylogResult>()
.Inner.JoinQueryOver(dlr => dlr.DaylogTest)
.WhereRestrictionOn(dlt =>
dlt.Daylog.DaylogID).IsIn(ids.ToArray())
.Fetch(dlr => dlr.ResultKey).Eager
.Fetch(dlr => dlr.History).Eager
.Future<DaylogResult>();
var daylogs = daylogQuery.ToList();
return daylogs;
}
ただし、Testkey と ResultKey の間の関係を具体的に読み込んでいるにもかかわらず、その関係を表すプロキシを使用することになります。
このクエリ全体は、おそらく QueryOver API の理解が不十分であることを表していると思います。そのため、あらゆるアドバイスをお願いしますが、主に、後で結果のリストではなくプロキシを取得する理由を理解したいと思います。 daylogresult.resultkey.testkey.results を取得しようとしています。
何か助けはありますか?