Saya perlu tahu apa perbedaan antara JoinQueryOver dan JoinAlias, dan kapan harus menggunakannya?
Jawaban:
Secara fungsional mereka melakukan hal yang sama, membuat join ke entitas lain. Satu-satunya perbedaan adalah apa yang mereka kembalikan. JoinQueryOver mengembalikan QueryOver baru dengan entitas saat ini menjadi entitas yang digabungkan, sementara JoinAlias mengembalikan QueryOver asli yang memiliki entitas saat ini sebagai entitas akar asli.
Apa pun yang Anda gunakan adalah masalah selera pribadi: (dari http://nhibernate.info/doc/nh/en/index.html#queryqueryover )
IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
.JoinQueryOver<Kitten>(c => c.Kittens)
.Where(k => k.Name == "Tiddles");
dan
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => kittenAlias.Name == "Tiddles");
Secara fungsional sama. Perhatikan bagaimana kittenAlias direferensikan secara tegas dalam kueri kedua.
Seri QueryOver - Bagian 2: Dasar-dasar dan Bergabung oleh Andrew Whitaker memberikan penjelasan yang sangat bagus:
Ringkasan:
IQueryOver
adalah tipe generik dengan dua parameter tipeTRoot
danTSubType
.Select
beroperasiTRoot
saat metode QueryOver lain beroperasiTSubType
.TRoot
tetap sama saat Anda membuat kueri, tetapiTSubType
berubah saat Anda bergabung menggunakanJoinQueryOver
JoinQueryOver
danJoinAlias
tambahkan gabungan ke kueri Anda.JoinAlias
tidak berubahTSubType
, tapi berubahJoinQueryOver
.- Anda dapat menggunakan alias saat membuat kueri untuk merujuk ke properti yang bukan milik
TRoot
atauTSubType
Kitten kittenAlias = null;
dan yangCat catAlias = null;
lebih lama. Saya merasa berantakan, jadi saya tidak menggunakannyaJoinAlias
kecuali jika diperlukan.