2010-01-14 11 views
23

प्रकार 'System.StackOverflowException' की एक बिना क्रिया का अपवाद mscorlib.dll
में हुई में हुई सुनिश्चित करें कि आप एक अनंत की जरूरत नहीं है लूप या अनंत रिकर्सन।सी # - इकाई की रूपरेखा - प्रकार 'System.StackOverflowException' की एक बिना क्रिया का अपवाद mscorlib.dll

internal static List<RivWorks.Model.Negotiation.ProductsSold> GetProductsSoldByCompany(Guid CompanyID) 
{ 
    var ret = from a in _dbRiv.ProductsSold where a.Company.CompanyId == CompanyID select a; 
    return ret.ToList(); 
} 

वापसी यह इकाई मॉडल में कॉल करता है और सभी विदेशी keyed वस्तुओं (बच्चे वस्तुओं) को भरने के लिए कोशिश करता है पर:

नीचे कोड इस पद्धति की सफलता पर कहा जाता है। स्कीमा है [1 कंपनी के पास कई उत्पाद हैं 0]। किसी कारण के लिए, निम्न कोड में कॉल सिर्फ खुद पर cascades:

[global::System.Data.Objects.DataClasses.EdmRelationshipNavigationPropertyAttribute("RIV_Model", "FK_ProductsSold_Company", "Company")] 
[global::System.Xml.Serialization.XmlIgnoreAttribute()] 
[global::System.Xml.Serialization.SoapIgnoreAttribute()] 
[global::System.Runtime.Serialization.DataMemberAttribute()] 
public Company Company 
{ 
    get 
    { 
     return ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company").Value; 
    } 
    set 
    { 
     ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company").Value = value; 
    } 
} 
/// <summary> 
/// There are no comments for Company in the schema. 
/// </summary> 
[global::System.ComponentModel.BrowsableAttribute(false)] 
[global::System.Runtime.Serialization.DataMemberAttribute()] 
public global::System.Data.Objects.DataClasses.EntityReference<Company> CompanyReference 
{ 
    get 
    { 
     return ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company"); 
    } 
    set 
    { 
     if ((value != null)) 
     { 
      ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.InitializeRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company", value); 
     } 
    } 
} 

आप देख सकते हैं, पहली विधि दूसरी विधि को फोन करेगा। दूसरी विधि अंतहीन रूप से कॉल करने लगती है।

मैं इसे ईएफ में कैसे ठीक करूं?

+0

मुझे आपके मैपिंग – hackerhasid

+1

के साथ किसी समस्या की तरह दिखता है सभी पूर्ण-योग्य नामों के साथ क्या है? वे यह समझने में अनावश्यक रूप से मुश्किल बनाते हैं कि क्या हो रहा है। –

+0

पूरी तरह से योग्य नाम ईएस के लिए कोड की एमएस की पीढ़ी से हैं ... –

उत्तर

6

3 के बाद बार, ढेर अतिप्रवाह जादुई चला गया है। < grrrrr/>

लाइन के साथ कहीं भी खराब विज़ार्ड त्रुटि पर चॉक करें।

+0

मेरे लिए समान नहीं होना चाहिए। मॉडल को पुनर्निर्मित करें और इसे – bernie2436

-6

स्टैक ओवरव्लो त्रुटि अंतहीन लूपिंग के कारण होती है जो पूर्ण कैश मेमोरी का उपयोग करती है और अंत में यह स्टैक ओवरफ़्लो त्रुटि दिखाती है।

अंतहीन पाश को रोकने की आवश्यकता है और यह एक ही फ़ंक्शन को कॉल करने का सबसे अच्छा अभ्यास नहीं है।

कोड अनुकूलित करें और लूपिंग से बचने का प्रयास करें।

+2

हम्म। तो आप सुझाव दे रहे हैं कि मैं विज़ार्ड निर्मित कोड में जाता हूं और इसे वहां रोकता हूं? और अगली बार जब मैं प्रोजेक्ट का निर्माण करता हूं और ईएफ मेरे लिए कोड दोबारा लिखता है तो मैं क्या करूँ? –

+3

@ शिवकांत, यह स्पष्ट और ज्ञात है। आप एक फिक्स का प्रस्ताव कैसे देते हैं? –

0

मुझे लगता है कि आपको कंपनी -> कंपनी संबंध आलसी लोड होने की आवश्यकता है।

1

इस प्रयास करें: हटाने और खरोंच से अपने मॉडल के पुनर्निर्माण पर

internal static List<RivWorks.Model.Negotiation.ProductsSold> GetProductsSoldByCompany(Guid CompanyID) 
{ 
    var ret = from a in _dbRiv.Company where a.CompanyId == CompanyID select a.ProductsSolds; 
    return ret.ToList(); 
} 
+0

यह एक संभावना की तरह दिखता है। एक बार मुझे कुछ अन्य आग लगने के बाद मैं इसका परीक्षण करूंगा। धन्यवाद। –

+0

यह संभवतः रिकर्सिंग को हल करने की संभावना है, लेकिन इसे पहले स्थान पर –

1

मुझे एएसपीनेट एमवीसी, एसक्यूएल सर्वर और लिंक से इकाइयों का उपयोग करके एक ही सटीक समस्या का सामना करना पड़ा। कॉलस्टैक के माध्यम से मैंने देखा कि मेरे दो भंडारों में से प्रत्येक के पास अन्य भंडार में एक नया भंडार कॉल था। उदाहरण ...

Repository1.cs

Respository2 repo2 = new Repository2(); 

Repository2.cs

Repository1 repo1 = new Repository1(); 

मैं अपने हिस्से पर एक मूर्खतापूर्ण गलती लगता है, वास्तव में यकीन नहीं क्या चल रहा (शायद किसी को यहाँ झंकार कर सकते हैं ...) स्पष्ट से अलग लेकिन मैंने रिपोजिटरी को फोन किया और सबकुछ ठीक काम करता है।

+0

तय किया गया था बहुत धन्यवाद, आपने अपना जीवन बचाया। यह वास्तव में मैं अपने रेपो में से एक में कर रहा हूं। एक बार फिर आपका धन्यवाद :) –

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