JoinQueryOver ve JoinAlias arasındaki farkın ne olduğunu ve her birini ne zaman kullanacağımı bilmem gerekiyor?
Yanıtlar:
İşlevsel olarak aynı şeyi yaparlar, başka bir varlığa bir birleşim oluştururlar. Tek fark, geri döndükleri şeydir. JoinQueryOver, varlığın katıldığı mevcut varlık ile yeni bir QueryOver döndürür, JoinAlias ise orijinal kök varlık olarak geçerli varlığa sahip orijinal QueryOver'ı döndürür.
Hangisini kullanırsanız kullanın kişisel bir zevk meselesidir: ( http://nhibernate.info/doc/nh/en/index.html#queryqueryover adresinden )
IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
.JoinQueryOver<Kitten>(c => c.Kittens)
.Where(k => k.Name == "Tiddles");
ve
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => kittenAlias.Name == "Tiddles");
İşlevsel olarak aynıdır. İkinci sorguda kittenAlias'a nasıl açıkça başvurulduğuna dikkat edin.
QueryOver Serisi - Bölüm 2: Temel Bilgiler ve Birleştirme Andrew Whitaker tarafından çok iyi bir açıklama sunar:
Özet:
IQueryOver
iki tür parametresi olan genel bir türdürTRoot
veTSubType
.Select
çalışırTRoot
, diğer QueryOver yöntemleri ameliyat ederkenTSubType
.TRoot
sorgu oluşturduğunuz gibi kalır, ancakTSubType
kullanarak katıldığınızda değişirJoinQueryOver
JoinQueryOver
veJoinAlias
sorgunuza birleşimler ekleyin.JoinAlias
değişmez yaparTSubType
, amaJoinQueryOver
yok.- Bir sorgu oluştururken de aittir yok özelliklerine başvurmak için takma adları kullanabilir
TRoot
veyaTSubType
Kitten kittenAlias = null;
veCat catAlias = null;
daha önce bildirmeniz gerektiğini unutmayın . Dağınık buluyorum, bu yüzden gerekmedikçe kullanmamJoinAlias
.