2010-04-07 13 views
5

निष्पादित नहीं कर सकता है मैं वर्तमान में इस "संग्रह के साथ संघर्ष कर रहा हूं संग्रह संग्रहित किया गया था; गणना ऑपरेशन" निष्पादन निष्पादित नहीं कर सकता है।NHibernate: संग्रह संशोधित किया गया था; गणना ऑपरेशन

मैंने इस त्रुटि संदेश की खोज की है, और यह सब foreach स्टेटमेंट से संबंधित है। मेरे पास कुछ foreach स्टेटमेंट हैं, लेकिन वे बस डेटा का प्रतिनिधित्व कर रहे हैं। मैंने किसी भी का उपयोग नहीं किया या फोरैच स्टेटमेंट के अंदर जोड़ें।

नोट:

  1. त्रुटि बेतरतीब ढंग से होता है (लगभग 4-5 बार एक दिन)।
  2. आवेदन एमवीसी वेबसाइट है।
  3. लगभग 5 उपयोगकर्ता इस एप्लिकेशन को संचालित करते हैं (लगभग 150 ऑर्डर दिन)। क्या यह कुछ अन्य उपयोगकर्ता संग्रह को संशोधित कर सकता है, और फिर यह त्रुटि हो सकती है?
  4. मैं सेटअप log4net है और सेटिंग्स here
  5. पाया जा सकता है यकीन है कि नियंत्रक एक parameterless सार्वजनिक निर्माता मैं AdminProductController में parameterless सार्वजनिक निर्माता है है कि बनाओ

क्या किसी को पता है कि क्यों ऐसा होता है और इस मुद्दे को कैसे हल करें?

एक दोस्त (ऑस्कर) उल्लेख किया है कि

"थ्योरी: हो सकता है समस्या यह है कि आपके विन्यास और सत्र कारखाने पहले अनुरोध आवेदन पुनः प्रारंभ करने पर पर आरंभ नहीं हो जाता है एक दूसरे अनुरोध में आता है। पहले अनुरोध समाप्त होने से पहले, शायद यह भी आरंभ करने का प्रयास करेगा और फिर किसी भी तरह से इस समस्या को ट्रिगर करेगा। "

बहुत धन्यवाद।

Daoming

त्रुटि संदेश यह:

System.InvalidOperationException संग्रह संशोधित किया गया था; गणना ऑपरेशन निष्पादित नहीं हो सकता है। System.InvalidOperationException: 'WebController.Controllers.Admin.AdminProductController' प्रकार के नियंत्रक को बनाने का प्रयास करते समय एक त्रुटि आई। सुनिश्चित करें कि नियंत्रक के पास पैरामीटर रहित सार्वजनिक कन्स्ट्रक्टर है। ---> System.Reflection.TargetInvocationException: अपवाद के लक्ष्य से अपवाद फेंक दिया गया है। ---> NHibernate.MappingException: इनपुट स्ट्रीम से डेटास्टोर को कॉन्फ़िगर नहीं किया जा सकता DomainModel.Entities.Mappings.OrderProductVariant.hbm.xml ---> System.InvalidOperationException: संग्रह संशोधित किया गया था; गणना ऑपरेशन निष्पादित नहीं हो सकता है। System.Xml.Schema.XmlSchemaSet.AddSchemaToSet (XmlSchema स्कीमा) System.Xml.Schema.XmlSchemaSet.Add पर (स्ट्रिंग targetNamespace, XmlSchema स्कीमा) पर System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext() पर सिस्टम पर .Xml.Schema.XmlSchemaSet.Add (XmlSchema स्कीमा) NHibernate.Cfg.Configuration पर।NHibernate.Cfg.Configuration.LogAndThrow पर LoadMappingDocument (XmlReader hbmReader, स्ट्रिंग नाम) NHibernate.Cfg.Configuration.AddInputStream (स्ट्रीम xmlInputStream, स्ट्रिंग नाम) --- भीतरी अपवाद स्टैक ट्रेस की समाप्ति --- पर (अपवाद अपवाद) NHibernate.Cfg.Configuration.AddInputStream (स्ट्रीम xmlInputStream, स्ट्रिंग नाम) NHibernate.Cfg.Configuration.AddResource (स्ट्रिंग पथ, विधानसभा विधानसभा) पर NHibernate.Cfg.Configuration.AddAssembly पर (विधानसभा विधानसभा) पर DomainModel.RepositoryBase पर ..ctor() वेबकंट्रोलर पर। नियंत्रक ._बेस कंट्रोलर..क्टर() वेबकंट्रोलर पर। नियंत्रक.एडमिन.एडमिन प्रोडक्ट कंट्रोलर ..क्टर() सिस्टम पर। रनटाइम टाइप। क्रिएटइंस्टेंसइम्पल (बूलियन पब्लिको केवल तभी, बूलियन skipVisibilityChecks, बूलियन fillCache) --- भीतरी अपवाद स्टैक ट्रेस की समाप्ति --- System.RuntimeType.CreateInstanceImpl (बूलियन publicOnly, बूलियन skipVisibilityChecks, बूलियन fillCache) पर System.Activator.CreateInstance पर (प्रकार प्रकार, बूलियन nonpublic) System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (requestContext requestContext, प्रकार controllerType) --- भीतरी अपवाद स्टैक ट्रेस की समाप्ति --- पर System.Web.Mvc.DefaultControllerFactory.GetControllerInstance पर (requestContext requestContext, प्रकार controllerType) System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext requestContext, स्ट्रिंग नियंत्रकनाम) System.Web.Mvc.MvcHandler.ProcessRequestInit (HttpContextBase httpContext, ICon पर) पर ट्रोलर & नियंत्रक, IControllerFactory & कारखाना) System.Web.Mvc.MvcHandler.BeginProcessRequest पर (HttpContextBase HttpContext, AsyncCallback कॉलबैक, राज्य वस्तु) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute पर() System.Web.HttpAplication.ExecuteStep पर (IExecutionStep चरण, बूलियन & पूर्ण सिंक्रनाइज़)

उत्तर

4

ओस्कर सही है। दो अलग-अलग धागे एक ही समय में सत्र कारखाने को शुरू करने की कोशिश कर रहे हैं। सुझाव है कि आप प्रारंभिक कोड के आसपास कुछ लॉकिंग डालें, शायद lock कीवर्ड और एक उपयुक्त सिंक्रनाइज़ेशन ऑब्जेक्ट का उपयोग कर। हम इस तरह एक पैटर्न का उपयोग किया है, Wintellect PowerThreading पुस्तकालय से ताले में से एक का उपयोग कर:

class NestedSessionManager 
{ 
    internal static SessionManager _sessionManager; 
    private static readonly object _syncRoot = new object(); 

    internal static SessionManager sessionManager 
    { 
     get 
     { 
      if (_sessionManager != null) return _sessionManager; 
      lock (_syncRoot) 
      { 
       if (_sessionManager != null) return _sessionManager; 
       _sessionManager = new SessionManager(); 
       return _sessionManager; 
      } 
     } 
    } 
} 
:

using (_lock.WaitToRead()) 
{ 
    if (Factory != null) return Factory; 
} 
using (_lock.WaitToWrite()) 
{ 
    if (Factory != null) return Factory; 
    Factory = ConfigureFactory(); 
    return Factory; 
} 

आप और अधिक बस सिर्फ इतना तरह lock कीवर्ड्स और दोबारा जांच ताला पैटर्न इस्तेमाल कर सकते हैं

+0

HI डेविड, मैंने कोड नमूना जोड़ा है। मुझे लगता है कि मैं log4net विवरण से कई बार कॉन्फ़िगरेशन बना रहा हूं। क्या आप मुझे सलाह दे सकते हैं? धन्यवाद। –

+0

नियंत्रक में कन्स्ट्रक्टर के बारे में क्या - क्या आप इसे पोस्ट कर सकते हैं? –

+0

HI डेविड, नियंत्रक नमूना कोड शामिल किया गया है। बहुत धन्यवाद। –

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

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