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:
IQueryOveradalah tipe generik dengan dua parameter tipeTRootdanTSubType.SelectberoperasiTRootsaat metode QueryOver lain beroperasiTSubType.TRoottetap sama saat Anda membuat kueri, tetapiTSubTypeberubah saat Anda bergabung menggunakanJoinQueryOverJoinQueryOverdanJoinAliastambahkan gabungan ke kueri Anda.JoinAliastidak berubahTSubType, tapi berubahJoinQueryOver.- Anda dapat menggunakan alias saat membuat kueri untuk merujuk ke properti yang bukan milik
TRootatauTSubType
Kitten kittenAlias = null;dan yangCat catAlias = null;lebih lama. Saya merasa berantakan, jadi saya tidak menggunakannyaJoinAliaskecuali jika diperlukan.