假設我在我的數據庫這些表是由Web服務(WCF)通過NHibernate的查詢:如何有效地檢索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(我目前還沒有牢牢掌握):)
是的,那是一種選擇。然而,我感興趣的是,如果我不想公開我的領域類中的關係(實際的代碼會使這一點變得更難一些),我知道如何使用NHibernate的Criteria API(或者HQL,如果有必要)來實現這一點因爲這種關係會在第二個表上) – Cygon
您可以嘗試在標準中使用別名,然後使用ProjectionList,但我不確定這是否會在未處理「處理」的情況下起作用。你總是可以映射治療並將它們標記爲「延遲加載」來提高效率。 – willDaBeast
未映射=映射:) – willDaBeast