Предположим, у меня есть эти таблицы в моей базе данных, к которой обращается веб-служба (WCF) через NHibernate:
Table "Patients"
Column "Id"
Column "LastName"
Column "FirstName"
Column "Age"
Table "Treatments"
Column "Id"
Column "PatientId"
Column "Name"
Column "IsActive"
Пациент может пройти любое количество процедур. Если бы я хотел собрать список пациентов с их в настоящее время активным лечением, как я мог бы наиболее эффективно достичь этого в NHibernate?
В настоящее время я делаю это (с помощью SetFirstResult () и SetMaxResults (), конечно):
var patientsWithTreatments = new List<PatientWithTreatments>();
var patients = Session.CreateCriteria<Patient>().List<Patient>();
foreach(Patient patient in patients) {
patientsWithTreatments.Add(
new PatientWithTreatments(patient) {
Treatments = Session.CreateCriteria<Treatment>()
.Add(Restrictions.Eq("PatientId", patient.Id)).List<Treatment>()
}
);
}
Что включает в себя возврат к базе данных для каждого пациента в наборе результатов, что является довольно плохой идеей. Есть ли какая-то магия с простыми запросами NHibernate или мне придется использовать HQL (чего я пока не знаю):)