2011-03-24 13 views

cevap

101

İşlevsel olarak aynı şeyi yaparlar, başka bir varlığa katılmalarını sağlarlar. Tek fark, geri döndükleri şeydir. JoinQueryOver, varlığın varlık olarak eklenen varlık ile birlikte yeni bir QueryOver döndürür, JoinAlias ​​ise özgün varlık olarak özgün varlık olan özgün QueryOver döndürür. (http://nhibernate.info/doc/nh/en/index.html#queryqueryover itibaren)

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"); 

işlevsel aynı mıdır: Kullanmak Hangisini

kişisel zevk meselesidir. KittenAlias'ın ikinci sorguda nasıl açıkça başvurulduğunu not edin.

+6

Not ait olmayan özelliklerine başvurmak için bir sorgu oluştururken

  • Sen takma adları kullanabilirsiniz;' ve 'Cat catAlias ​​= null;' önceki. Dağınık buluyorum, bu yüzden gerekli olmadıkça 'JoinAlias' kullanmam. – foka

  • +0

    Bunu açıklamak için @foka teşekkür ederiz. Bunu özledim ve neden işe yaramadığını merak ettim. –

    10

    QueryOver Series - Part 2: Basics and Joining by Andrew Whitaker çok iyi bir açıklama verir:

    Özet:

    • IQueryOver diğer QueryOver yöntemleri ameliyat ederken TRoot çalışır iki tür parametreleri TRoot ve TSubType
    • .Select ile genel bir türüdür TSubType. Bir sorgu bina konum olarak
    • TRoot aynı kalır, ancak JoinQueryOver
    • JoinQueryOver ve JoinAlias eklenti sorgunuzla katılır kullanarak katıldığınızda TSubType değiştirir. JoinAlias, TSubType değiştirmez, ancak JoinQueryOver yapar. İkinci örnekte takma ad `= null Kitten kittenAlias ​​bildirmek sahip TRoot veya TSubType
    İlgili konular