我正在使用下面的代碼來創建一個報告(返回的對象列表被用作rdlc文件中的數據源)。在nHibernate中優化查詢
我在查詢TNA對象列表,其中每個對象都可以包含一個Training對象列表。每個Training對象都可以包含一個Course對象。每個TNA對象都包含一個Employee對象。
但是,我發現代碼需要很長時間才能運行。
另外,如果我們有超過幾百個TNA對象,那麼在查詢完成之前會出現內存不足錯誤。
我沒有很多nHibernate的經驗 - 是否有可能優化此代碼或在代碼中是否存在任何明顯的錯誤?
在此先感謝。
DetachedCriteria dc = this.BuildPermissions(moduleUser, typeof(TNA));
ICriteria criteria = dc.GetExecutableCriteria(this.Session);
criteria.Add(Restrictions.Eq("Id", id));
criteria.CreateAlias("TrainingRecords", "TrainingRecords", NHibernate.SqlCommand.JoinType.LeftOuterJoin);
criteria.Add(Restrictions.Not(Restrictions.Eq("TrainingRecords.TNAStatus", TNAStatus.Optional)));
ProjectionList projectionList =
Projections.ProjectionList()
.Add(Projections.Property("OrgUnit"), "OrgUnit")
.Add(Projections.Property("Employee"), "Employee")
.Add(Projections.Property("TrainingRecords.Course"), "Course")
.Add(Projections.Property("TrainingRecords.RequiredBy"), "RequiredBy")
.Add(Projections.Property("TNATemplate"), "TNATemplate")
.Add(Projections.Property("TrainingRecords.TNAStatus"), "TNAStatus")
.Add(Projections.Property("Customer"), "Customer");
ICriteria result = criteria.SetProjection(projectionList)
.SetResultTransformer(Transformers.AliasToBean<TrainingMatrix>());
return result.List<TrainingMatrix>();
不幸的是,我已經完成了大部分這些步驟,並且我需要一次完成所有數據。問題似乎是返回的對象的數量 - 數千個 - 這似乎導致內存不足錯誤。 – Matt