我正在使用下面的代码来创建一个报告(返回的对象列表被用作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