J'utilise le code suivant pour créer un rapport (la liste des objets renvoyés est utilisée comme source de données dans un fichier rdlc).Optimisation des requêtes dans nHibernate
J'interroge une liste d'objets TNA, chacun pouvant contenir une liste d'objets Training. Chaque objet Training peut contenir un objet Course. Chaque objet TNA contient un objet Employee.
Cependant, je trouve que le code prend beaucoup de temps à s'exécuter.
En outre, si nous avons plus de quelques centaines d'objets TNA, nous obtenons une erreur de mémoire insuffisante avant la fin de la requête.
Je n'ai pas beaucoup d'expérience avec nHibernate - est-il possible d'optimiser ce code ou y a-t-il des erreurs évidentes dans le code?
Merci d'avance.
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>();
Malheureusement, j'ai traversé la plupart de ces étapes, et j'ai besoin de toutes les données à la fois. Le problème semble être le nombre d'objets renvoyés - plusieurs milliers - qui semblent provoquer une erreur de mémoire insuffisante. – Matt