2011-01-04 9 views
6

मैं एक प्रश्न है कि NHibernate LINQ 2.1.2 में काम करता था, लेकिन यह NH3 साथ NotSupportedException फेंक जाता है:NHibernate 3 LINQ भीतरी में शामिल होने के तीन छलांग के साथ इस मुद्दे: NotSupportedException

IQueryable<Tree> query = from flower in GetSession().Query<Flower>() 
          from leaf in flower.Stem.Leaves // <--- the problem is here with three jumps 
          where leaf.Color == Green 
          select flower; 

संबंधों की तरह हैं:

  • फूल संदर्भ स्टेम
  • स्टेम HasMany फूल
  • पत्ता संदर्भ स्टेम
  • स्टेम हैसनी पत्तियां

अपवाद को एनएचबर्ननेट में लाइन 204 से फेंक दिया गया है। लिंक्स। विज़िटर .QueryModelVisitor। कि धागा स्टीफन कहा गया है कि वाक्य रचना समर्थित नहीं है के तहत

http://groups.google.com/group/nhusers/browse_thread/thread/dbceb7eb1e31f027/f8e69671b750e0d6?lnk=gst&q=NotSupportedException+stefan#f8e69671b750e0d6

:

public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index) 
    { 
     if (fromClause is LeftJoinClause) 
     { 
      // It's a left join 
      _hqlTree.AddFromClause(_hqlTree.TreeBuilder.LeftJoin(
           HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), 
           _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); 
     } 
     else if (fromClause.FromExpression is MemberExpression) 
     { 
      var member = (MemberExpression) fromClause.FromExpression; 

      if (member.Expression is QuerySourceReferenceExpression) 
      { 
       // It's a join 
       _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Join(
            HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), 
            _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); 
      } 
      else 
      { 
       // What's this? 
       throw new NotSupportedException(); // <--------- LINE 204 
      } 
     } 
     else 
     { 
      // TODO - exact same code as in MainFromClause; refactor this out 
      _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Range(
           HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters), 
           _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); 

     } 

     base.VisitAdditionalFromClause(fromClause, queryModel, index); 
    } 

यह मुझे एक ही समस्या निम्न धागा के तहत चर्चा की है लगता है: यहाँ स्रोत कोड से विधि है :

LINQ प्रदाता उम्मीद अभिव्यक्ति होने के लिए:

0,123,

QuerySourceReferenceExpression। सदस्य

हालांकि, के मामले में loan.Application.Borrowers यह है में BRW से:

QuerySourceReferenceExpression। सदस्य । सदस्य

तो यह निश्चित रूप से एक असमर्थित सुविधा है।

तो, क्या यह वाक्यविन्यास किसी भी समय NH3 LINQ में समर्थित होने जा रहा है? मुझे लगता है कि यह एक छोटा सिंटैक्स है और यह अच्छा है।

 IQueryable<Tree> query = from stem in GetSession().Query<Stem>() 
           from leaf in stem.Leaves 
           from flower in stem.Flowers 
           where leaf.Color == Green 
           select flower; 

BTW, किसी को एक बेहतर समाधान का है:

हालांकि मैं के रूप में क्वेरी दोबारा लिख ​​कर इस समस्या के जा सकते हैं?

nhusers लिंक: http://groups.google.com/group/nhusers/browse_thread/thread/334a53c749b0b377

उत्तर

1

आखिर उस प्रयास में डाल दिया, अपने प्रश्न:

इस वाक्य रचना के लिए जा रहा कभी भी NH3 LINQ में समर्थित होना है?

... इस मंच में उत्तर नहीं दिया जा सकता है। NHibernate एक रोडमैप के साथ एक वाणिज्यिक उत्पाद नहीं है। आप यहां सिर्फ पोस्ट नहीं कर सकते हैं और आशा करते हैं कि स्वयंसेवक डेवलपर्स में से एक जवाब दे।

याद रखें कि NHibernate खुला स्रोत है, इसलिए समुदाय (आप सहित!) इस तरह के मुद्दों का मालिक है।

मैं nhibernate-development सूची का पालन कर रहा हूं, और ऐसा लगता है कि LINQ प्रदाता काम का एक प्रमुख क्षेत्र है। हालांकि, मुझे नहीं पता कि आपका विशिष्ट मुद्दा संबोधित किया जाएगा या नहीं। इस मुद्दे को ठीक करने की संभावनाओं को बढ़ाने का सबसे अच्छा तरीका है एनएचबीरनेट JIRA में समस्या को दिखाते हुए परीक्षण केस के साथ एक बग फाइल करना।

यदि ऐसा नहीं लगता है कि आपके विशिष्ट मुद्दे को संबोधित किया जाएगा, तो क्यों नहीं download the source code और इसे स्वयं ठीक करने का प्रयास करें, और/या मेलिंग सूची पर आगे चर्चा करें? यदि आप स्रोत कोड डाउनलोड करते हैं और इसके साथ काम करते हैं, तो आप यह भी पाएंगे कि इसमें बहुत सारे उदाहरण हैं उदाहरण परीक्षण केस जिन्हें आप बग फ़ाइल करते समय उदाहरण के रूप में उपयोग कर सकते हैं।

+0

देखभाल हल किया गया है है -1 व्याख्या करने के लिए? मैंने इस बारे में उपयोगी सुझाव दिए कि समस्या कैसे दृश्यता प्राप्त कर सकती है और/या अंत में हल हो सकती है। सिर्फ इसलिए कि यह वह जवाब है जिसे आप सुनना नहीं चाहते हैं इसका मतलब यह नहीं है कि इसे वोट दिया जाना चाहिए। ;-) – mpontillo

+3

आपको मेरा वोट मिलता है। बहुत से लोग ओएसएस को वाणिज्यिक ऐप्स के समान सोचते हैं, और कभी भी इस बारे में सोचना नहीं कि वे स्वयं कैसे योगदान कर सकते हैं। (हालांकि, यह भी कहा गया है कि एक अनुभवी डेवलपर के रूप में, एनएच कोडबेस डरावना है) –

+1

बस पाया [यह आलेख] (http://nhforge.org/blogs/nhibernate/archive/2008/10/04/the-best- way-to-resol-nhibernate-bugs-submit-good-unit-test.aspx) जो इस पथ पर जाने पर सहायक हो सकता है। – mpontillo

1

अपने सटीक उदाहरण का परीक्षण किया है नहीं, लेकिन मैं राष्ट्रीय राजमार्ग 3.2 में एक ऐसी ही मुद्दा था और पाया गया कि राष्ट्रीय राजमार्ग 3.3 में