एंटिटी फ्रेमवर्क में नया होने के नाते, मैं वास्तव में मुद्दों के इस सेट के साथ आगे बढ़ने के तरीके पर अटक गया हूं। प्रोजेक्ट पर मैं वर्तमान में काम कर रहा हूं, पूरी साइट ईएफ मॉडल के साथ काफी एकीकृत है। सबसे पहले, ईएफ संदर्भ तक पहुंच को निर्भरता इंजेक्शन बूटस्ट्रैपर का उपयोग करके नियंत्रित किया जा रहा था। परिचालन कारणों से हम एक डीआई पुस्तकालय का उपयोग करने में सक्षम नहीं थे। मैंने इसे हटा दिया और जहां आवश्यक हो वहां संदर्भ ऑब्जेक्ट के अलग-अलग उदाहरणों का एक मॉडल इस्तेमाल किया। मुझे निम्नलिखित अपवाद मिलना शुरू हो गया:.NET इकाई फ्रेमवर्क और लेनदेन
प्रकार 'XXX' को एक से अधिक बार मैप किया गया है।
हम इस निष्कर्ष पर पहुंचे कि संदर्भ के विभिन्न उदाहरण इस मुद्दे का कारण बन रहे थे। इसके बाद मैंने संदर्भ ऑब्जेक्ट को एक स्थिर आवृत्ति में सारणीबद्ध किया जिसे प्रत्येक थ्रेड/पेज द्वारा एक्सेस किया जा रहा था। मैं अब लेन-देन के बारे में कई अपवादों में से एक हो रही है:
नई लेन-देन की अनुमति नहीं है क्योंकि वहाँ अन्य थ्रेड सत्र में चल रहे हैं।
लेनदेन ऑपरेशन नहीं किया जा सकता क्योंकि इस लेनदेन पर काम कर रहे लंबित अनुरोध हैं।
ExecuteReader को आदेश देने के लिए कमांड की आवश्यकता होती है जब कमांड को असाइन किया गया कनेक्शन लंबित स्थानीय लेनदेन में होता है। कमांड की लेनदेन संपत्ति शुरू नहीं की गई है।
इनमें से आखिरी अपवाद लोड ऑपरेशन पर हुआ। मैं संदर्भ स्थिति को वापस असफल थ्रेड पर डीबी पर सहेजने की कोशिश नहीं कर रहा था। हालांकि एक और धागा ऐसा ऑपरेशन कर रहा था।
ये अपवाद सर्वोत्तम रूप से अस्थायी हैं, लेकिन मैंने साइट को ऐसे राज्य में जाने में कामयाब रहा है जहां लेनदेन लॉक के कारण नए कनेक्शन अस्वीकार कर दिए गए थे। दुर्भाग्य से मुझे अपवाद विवरण नहीं मिल रहा है।
मुझे लगता है कि मेरा पहला सवाल है, क्या ईएफ मॉडल को एक स्थिर एकल उदाहरण से उपयोग किया जाना चाहिए? साथ ही, क्या ईएफ में लेनदेन की आवश्यकता को दूर करना संभव है? मैं सफलता के बिना एक TransactionScope
वस्तु का उपयोग कर की कोशिश की है ...
ईमानदार मैं एक बहुत यहाँ अटक कर रहा हूँ होने के लिए, और नहीं समझ सकता क्यों (क्या होना चाहिए) काफी सरल संचालन इस तरह के एक समस्या पैदा कर रहे हैं ...
संबंधित: http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request- क्यों – Steven
यह बहुत बुरा है कि आप एक आईओसी बूटस्ट्रैपर का उपयोग नहीं कर सकते, क्योंकि [Ninject] (http के साथ समाधान : //www.ninject.org/) _request scope_ पर "सामान्य" उदाहरण को बाध्य करना होगा, जैसा कि अन्य ने सुझाव दिया है: 'kernel.ind>()। > () .रूक्वेस्टस्कोप(); '- महत्वपूर्ण हिस्सा ** 'InRequestScope' ** –
drzaus