7

यह सवाल this से संबंधित है:इकाई की रूपरेखा: वहाँ पहले से ही इस आदेश के साथ जुड़े किसी खुले DataReader जो पहले बंद होना चाहिए है

public IEnumerable<ApplicationPositionHistory> GetApplicationPositionHistories(int applicantId, int positionId) 
     { 
      return context.ApplicationsPositionHistory.Where(d => d.applicantPosition.ApplicantID == applicantId && d.applicantPosition.PositionID == positionId).Include(o => o.applicantPosition) ; 
     } 

मेरे एचटीएमएल यह है:

मेरे भंडार विधि इस कोड है कोड:

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.applicantPosition.Applicant.name) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.applicantPosition.Position.name) 
     </td> 

पूर्ण अपवाद है:

इस कमांड से पहले से ही एक खुला डेटा रीडर है जो पहले बंद होना चाहिए।

यह HTML @ Html.DisplayFor (modelItem => item.applicantPosition.Applicant.name)

उत्तर

20

त्वरित समाधान:

public IEnumerable<ApplicationPositionHistory> GetApplicationPositionHistories(int applicantId, int positionId) 
    { 
     return context.ApplicationsPositionHistory.Where(d => d.applicantPosition.ApplicantID == applicantId && d.applicantPosition.PositionID == positionId).Include(o => o.applicantPosition).ToList() ; 
    } 

आप जानना चाहते हैं, तो यह क्यों अपनी समस्या ठीक करने के बारे में कैसे पढ़ें LINQ और निष्पादित निष्पादन काम करता है। कुछ शब्दों में - यदि आप ToList द्वारा "गणना" क्वेरी द्वारा चयन के निष्पादन को "बल" नहीं देते हैं, तो वास्तव में इसे बहुत देर से निष्पादित किया जाता है। और यह अन्य प्रश्नों के साथ परेशानी पैदा कर रहा है जो समान कनेक्शन का उपयोग करना चाहते हैं।

+0

यह वही त्रुटि मेरे लिए हुआ है, और मैं उस मॉडल के नियंत्रक में उत्सुक लोडिंग का उपयोग कर रहा था। जो मैं समझता हूं, उससे उत्सुक लोडिंग इस मामले में समर्थित नहीं है, इसलिए नियंत्रक में इस संपत्ति के लिए 'शामिल करें (...)' को छोड़कर, और मेरे शेष के अंत में '.TList() 'जोड़ना। शामिल करें (...) 'बयानों ने समस्या को ठीक किया है - धन्यवाद। –

1

की पहली पंक्ति में फेंक था आम तौर पर ध्यान में रखते हुए एफई वस्तु का उपयोग नहीं करते हैं, लेकिन के लिए एक POCO वस्तु बनाने दृश्य मॉडल और दृश्य मॉडल पर क्वेरी परिणाम मानचित्र करें। EF अपनी रिपॉजिटरी विधि में क्वेरी निष्पादित नहीं करता है क्योंकि क्वेरी को परिभाषा समय पर निष्पादित नहीं किया जाता है, लेकिन केवल तभी जब आप डेटा तक पहुंचने का प्रयास करते हैं। आपके विचार में आप एक ही प्रश्न का प्रयोग कई बार कर रहे हैं और यह सही नहीं है।

आप अपने भंडार विधि द्वारा वापस वस्तु की सूची एक्सेस उपयोग करना चाहते हैं toList

0

वास्तविक समस्या यदि आप आलसी हैं तो आवेदक स्थिति इकाई से स्थिति संदर्भ लोड हो रहा है इससे पहले कि क्वेरी निष्पादन समाप्त हो जाए। यदि आप उस परिदृश्य पर स्थगित निष्पादन रखना चाहते हैं तो आप अपनी क्वेरी पर स्थिति संदर्भ लोड कर सकते हैं:

शामिल करें (o => o.applicantPosition.Select (a => a.Position));

और आपके GetAplicationPositionHistories पर IENumerable लौटता रहता है।

दूसरा समाधान वास्तव में GetApplicationPositionHistories विधि पर क्वेरी को चलाने के लिए क्वेरी पर ToList() या ToArrray() विधियों को कॉल करना है।

6

यह त्रुटि होती है जब आप किसी अन्य क्वेरी के अंदर होते हैं तो एक नई क्वेरी निष्पादित की जा रही है। पर विचार करें जब आप अपने दृश्य

@Html.DisplayFor(modelItem => item.Device.Name) 

में और अपने डिवाइस मॉडल में कुछ इस तरह है कि आप डिवाइस के मूल्यांकन के लिए तब से

public string Name 
    { 
     get 
     { 
      return String.Format("{0} {1}", Brand.BrandName, Model.ModelName); 
     } 
    } 

है।नाम यह अपने ब्रांड को क्वेरी करने की आवश्यकता है और मॉडल यह क्वेरी के अंदर क्वेरी हो जाएगा और इसलिए समाधान के रूप में निम्नानुसार अपने डेटाबेस कनेक्शन स्ट्रिंग में MutlipleActiveResultSets सक्षम करने के लिए है:

<add name="MyDBContext" connectionString="Data Source=.;Initial Catalog=mydb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 
12

आप अपने कनेक्शन स्ट्रिंग के लिए MultipleActiveResultSets=true; जोड़ने की कोशिश की है? जब मैं एक TPH विरासत संरचना है, जहां एक व्युत्पन्न वर्ग में से एक पर एक-से-शून्य या एक संबंध था का उपयोग कर एक मॉडल आधार वर्ग से विरासत के लिए इसी तरह के दो मॉडल वर्गों reimplemented

+2

मैं संदर्भ का उपयोग कर रहा था। । ढूँढें (आईडी), जो कुछ कारणों से ओपी द्वारा उल्लिखित त्रुटि का कारण बनता है। कनेक्शन-स्ट्रिंग में इस सेटिंग को जोड़ने से समस्या हल हो गई। – CodeMonkey

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

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