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.
Kitten kittenAlias = null;
dan yangCat catAlias = null;
lebih lama. Saya merasa berantakan, jadi saya tidak menggunakannyaJoinAlias
kecuali jika diperlukan.Seri QueryOver - Bagian 2: Dasar-dasar dan Bergabung oleh Andrew Whitaker memberikan penjelasan yang sangat bagus:
sumber