tom*_*ich 7 nhibernate queryover
我有一个非常复杂的对象图,我想一举加载.
样本具有Daylog,其具有Daylog测试,其具有Daylog结果
Daylog测试具有Testkeys,Daylog结果具有Resultkeys,TestKeys具有Resultkeys.
我正在使用QueryOver API和Future将这些全部作为一个查询运行,NHibernate应该需要实例化整个图形IS所需的所有数据,并由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;
}
Run Code Online (Sandbox Code Playgroud)
但是,我仍然最终使用代理来表示Testkey和ResultKey之间的关系,即使我特意加载了这种关系.
我认为整个查询可能代表对QueryOver API的理解不足,所以我想要任何和所有建议,但主要是,我想了解为什么我得到一个代理而不是后面的结果列表我试着得到daylogresult.resultkey.testkey.results.
有帮助吗?
| 归档时间: |
|
| 查看次数: |
5593 次 |
| 最近记录: |