は、私はNHibernateは介してウェブサービス(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を使用する必要があるのでしょうか?(私はまだ確信していません):
はい、これは1つのオプションです。私が関心を持っているのは、私のドメインクラスで関係を公開したくない場合、NHibernateのCriteria API(または必要ならHQL)でこれをどのように達成できるかを知ることです(実際のコードはこれを少し難しくします)関係は2番目のテーブルに行くので) – Cygon
エイリアスを使用してからProjectionListをCriteria内で試してみることができますが、これは 'Treatments'がマップされていないと機能しないかどうかはわかりません。あなたはいつも、トリートメントをマッピングして効率を改善する「レイジーローディング」としてマークすることができます。 – willDaBeast
unmapped = mapped :) – willDaBeast