JoinQueryOver ve JoinAlias ​​arasındaki fark nedir?


88

JoinQueryOver ve JoinAlias ​​arasındaki farkın ne olduğunu ve her birini ne zaman kullanacağımı bilmem gerekiyor?

Yanıtlar:


108

İş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.


7
İkinci örnekte takma adları Kitten kittenAlias = null;ve Cat catAlias = null;daha önce bildirmeniz gerektiğini unutmayın . Dağınık buluyorum, bu yüzden gerekmedikçe kullanmam JoinAlias.
foka

Bunu açıkladığınız için teşekkür ederim @foka. Bunu kaçırdım ve neden işe yaramadığını merak ediyordum.
Mario Tacke

12

QueryOver Serisi - Bölüm 2: Temel Bilgiler ve Birleştirme Andrew Whitaker tarafından çok iyi bir açıklama sunar:

Özet:

  • IQueryOveriki tür parametresi olan genel bir türdür TRootveTSubType
  • .Selectçalışır TRoot, diğer QueryOver yöntemleri ameliyat ederken TSubType.
  • TRootsorgu oluşturduğunuz gibi kalır, ancak TSubTypekullanarak katıldığınızda değişirJoinQueryOver
  • JoinQueryOverve JoinAliassorgunuza birleşimler ekleyin. JoinAliasdeğişmez yapar TSubType, ama JoinQueryOveryok.
  • Bir sorgu oluştururken de aittir yok özelliklerine başvurmak için takma adları kullanabilir TRootveyaTSubType
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.