У меня есть довольно сложный граф объектов, который я хочу загрузить одним махом.
В образцах есть дневные журналы, в которых есть тесты дневного журнала, у которых есть результаты дневного журнала.
У тестов Daylog есть Testkeys, у результатов Daylog есть Resultkeys, а у TestKeys есть Resultkeys.
Я использую QueryOver API и Future, чтобы запускать все это как один запрос, и все данные, которые должны понадобиться 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, хотя я специально загружаю эти отношения.
Я думаю, что весь этот запрос, вероятно, свидетельствует о плохом понимании API QueryOver, поэтому мне хотелось бы получить любые советы по нему, но в первую очередь я хотел бы понять, почему я получаю прокси, а не список результатов, когда позже Я пытаюсь получить daylogresult.resultkey.testkey.results.
Любая помощь?