मैं आपके RavenDB DocumentStore को स्थापित करने के लिए एक कस्टम निनजा प्रदाता का उपयोग करने की अनुशंसा करता हूं। सबसे पहले इसे अपने कोड ब्लॉक में रखें जो आपकी निंजा सेवाओं को पंजीकृत करता है।
kernel.Bind<IDocumentStore>().ToProvider<RavenDocumentStoreProvider>().InSingletonScope();
अगला, इस कक्षा को जोड़ें जो निंजा प्रदाता लागू करता है।
public class RavenDocumentStoreProvider : Provider<IDocumentStore>
{
var store = new DocumentStore { ConnectionName = "RavenDB" };
store.Conventions.IdentityPartsSeparator = "-"; // Nice for using IDs in routing
store.Initialize();
return store;
}
IDocumentStore को सिंगलटन होना चाहिए, लेकिन IDocumentSession को सिंगलटन न बनाएं। मैं अनुशंसा करता हूं कि आप IDocumentStore इंस्टेंस पर OpenSession() का उपयोग करके बस एक नया IDocumentSession बनाएं निनजेक्ट आपको जब भी आपको RavenDB से बातचीत करने की आवश्यकता हो, आपको देता है। IDocumentSession ऑब्जेक्ट्स बहुत हल्के होते हैं, यूनिट-ऑफ-वर्क पैटर्न का पालन करते हैं, थ्रेड-सुरक्षित नहीं होते हैं, और इसका उपयोग किया जाता है और जहां आवश्यक हो वहां जल्दी से निपटान किया जाता है।
जैसा कि अन्य ने किया है, आप आधार एमवीसी नियंत्रक को लागू करने पर भी विचार कर सकते हैं जो क्रमशः सत्र खोलने और परिवर्तनों को सहेजने के लिए ऑनएक्शन एक्स्क्रिप्टिंग और ऑनएक्शन एक्स्क्लेटेड विधियों को ओवरराइड करता है।
+1 निनजेक्ट इन अनुरोधों को सत्र में करना आसान बनाता है जैसा कि InRequestScope() http://bit.ly/HJADY3 – DalSoft
का उपयोग करके उत्तर दिया गया है आप SaveChanges() कहां से कॉल करते हैं? मैंने इसे किसी भाग्य के साथ Application_EndRequest में करने की कोशिश की। – Andrew
मैं SaveChanges() को स्पष्ट रूप से कॉल करता हूं जब ऐसा करने का अर्थ होता है, स्वचालित रूप से प्रत्येक अनुरोध के अंत में नहीं। मुझे यकीन नहीं है कि आपको ऐसा करने की आवश्यकता क्यों है या आपको समस्या क्यों आ रही है। मुझे संदेह है कि निनजेक्ट के संचालन के आदेश के साथ कुछ करने के लिए अनुरोध किया गया है, भले ही निर्भरता के आधार पर कुछ निदान जानकारी हो। –