2011-03-17 6 views
12

मुझे ग्रुप बाय और उत्सुक लोडिंग के साथ समस्याएं आ रही हैं। मैं समझाने की कोशिश करता हूं कि मैं क्या कर रहा हूं। मैं घटनाओंलिंक/ईएफ, मुद्दों से उत्सुक लोडिंग और ग्रुप

के लिए एक DataContext ctx क्वेरी करने कर रहा हूँ घटना वर्ग है निम्नलिखित गुण

string Description 
DateTime Date 
bool IsDeleted 
Guid SubjectId 
string Title 
DateTime Created 
Guid ForProjectId 

Person TriggeredBy 
List<Guid> Targets 

एक ही SubjectId साथ muttiple घटनाओं रहे हैं और मैं अद्वितीय SubjectIds साथ और कहा कि घटनाओं के होने अंत चाहते हैं समूह में सबसे नया हैं। मैं निम्नलिखित क्वेरी के साथ समाप्त होता हूं।

var events = from x in 
      (from e in ctx.Events 
       .Include("TriggeredBy") 
       .Include("Targets") 
       group e by e.SubjectId 
       into g 
       select new 
        { 
         GroupId = g.Key, 
         EventsWithSameSubjectId = g, 
        } 
      ) 
       select x.EventsWithSameSubjectId 
       .OrderByDescending(y => y.Created).FirstOrDefault(); 

क्वेरी संकलित ठीक है और परिणामस्वरूप सही परिणाम देता है। लेकिन शामिल गुण हमेशा शून्य हैं।

जब मैं क्वेरी पट्टी अगर eagor लोड हो रहा है ठीक से काम कर रहा है देखने के लिए ....

var events = (from e in ctx.Events.OfType<DataNotificationEvent>() 
       .Include("TriggeredBy") 
       .Include("Targets") 
       select e).ToList(); 

यह सब शामिल गुणों के साथ घटनाओं लौटने।

क्या यह लिंक/ईएफ के साथ ज्ञात समस्या/बग है या क्या मैं इस त्रुटि से छुटकारा पा सकता हूं।

सादर

विन्सेंट Ottens

+0

जब आप इसे समूहबद्ध (और उप-चयन और अनुमान) के साथ जोड़ते हैं तो उत्सुक लोडिंग के साथ कोई समस्या है। इस प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/4474951/entity-framework-include-is-not-working/4475504#4475504 उत्तर में दो लिंक किए गए लेख आपको कामकाज खोजने में मदद कर सकते हैं। – Slauma

उत्तर

9

आपको गुमनाम प्रकार पर पेश कर रहे हैं, तो Include() उस तरह काम करने के लिए नहीं जा रहा है। क्योंकि आपने group के साथ क्या किया है और अज्ञात प्रकार में प्रक्षेपित करना क्वेरी के आकार को बदलना है। वह उत्सुक लोडिंग को बाहर कर देता है। पढ़ना this article मदद कर सकता है।

2

त्वरित उत्तर के लिए Thnx। आपने मुझे सही दिशा में इंगित किया। यहां समाधान है जिसके साथ मैं आया:

using MyFunc = Func<ExtendedCoreContext, Guid, IQueryable<DataNotificationEvent>>; 

private static readonly MyFunc GetMentionsNewCompiledQuery = 

    CompiledQuery.Compile<ExtendedCoreContext, Guid, IQueryable<DataNotificationEvent>>(

     (ctx, personId) => ((ObjectQuery<DataNotificationEvent>)(
      from x in (
       from e in ctx.Events.OfType<DataNotificationEvent>() 
       group e by e.SubjectId 
       into g 
       select g.OrderByDescending(p => p.Created).FirstOrDefault() 
      ) 
      orderby x.Created descending 
      where x.Targets.Any(t => t.Id == personId) 
      select x 
     )) 
      .Include(EntityProperties.Event.TriggeredBy) 
      .Include(EntityProperties.DataNotificationEvent.Targets) 

    ); 
संबंधित मुद्दे