【发布时间】:2011-07-28 10:29:20
【问题描述】:
假设我的数据库中有这些表,这些表由 Web 服务 (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(我还没有牢牢掌握):)
【问题讨论】:
标签: c# mysql database wcf nhibernate