다음 코드를 사용하여 보고서를 만듭니다 (반환 된 개체 목록은 rdlc 파일의 데이터 소스로 사용됩니다).nHibernate에서 쿼리 최적화
각 트레이닝 개체 목록을 포함 할 수있는 TNA 개체 목록을 쿼리하고 있습니다. 각 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