2009-01-19 18 views
5

हम एक एंटरप्राइज़ फ्रेमवर्क का उपयोग करते हैं जिसे हमने कंपनी विशिष्ट सामानों के सभी प्रकार की सुविधा के लिए लिखा है जो हम करते हैं।सी #, विनफॉर्म और LINQ से SQL .. Datacontext जीवन चक्र?

ढांचे के भीतर, हम उचित होने पर उपयोग करने के लिए SQL ORM को LINQ प्रदान करते हैं। यह सब माइक्रोसॉफ्ट एमवीसी ढांचे पर आधारित है। एमवीसी पक्ष पर, हम अपने बेस नियंत्रक में डेटाैकेंटेक्स्ट को नया करते हैं। यह हमें एक पूर्ण डेटाकॉन्टेक्स्ट लाइफसाइकिल की अनुमति देता है, जो लेनदेन के लिए बेहद उपयोगी है।

एक कार्य जिसे हम पूरा करना चाहते हैं वह Winforms समर्थन प्रदान करना है।

हालांकि, मैं दीवार के खिलाफ अपने सिर को टक्कर लगी हूं जो एक दृष्टिकोण को समझने की कोशिश कर रहा है जो Winforms के लिए समान रूप से काम करेगा।

यह देखते हुए कि एमवीसी दृष्टिकोण काफी सीधे आगे है क्योंकि एक पेज लोड लॉजिकल लेनदेन का प्रतिनिधित्व करता है, Winforms पक्ष पर समाधान के साथ आना मुश्किल है।

क्या किसी ने कुछ भी किया है या कोई सिफारिशें हैं?

उत्तर

2

मैंने पिछले कुछ वर्षों में बनाए गए कुछ छोटे सॉफ्टवेयर के लिए ऐसा कुछ किया था।

हमने एक एप्लिकेशन खोल बनाया जो अनुरोध/प्रतिक्रिया मॉडल के समान रूपों को लोड करता है।

मैं एक RenderView() विधि है कि मैं वेब के लिए और खिड़कियों रूपों के लिए क्रियान्वित किया है के साथ एक IRenderer इंटरफ़ेस का निर्माण किया। यह मुझे दोनों के लिए एक ही नियंत्रक और मॉडल का उपयोग करने की अनुमति देता है। अच्छे पर मॉडल-व्यू-व्यू मॉडेल (एमवीवीएम) के लिए खोजें और आपको इस दृष्टिकोण के बारे में कुछ मिल सकता है।

मुझे लगता है कि this article आपको यह समझने में मदद कर सकता है कि मैं किस बारे में बात कर रहा हूं।

+0

जानकारी के लिए बहुत बहुत धन्यवाद! –

3

यदि आप दीर्घकालिक डेटाकॉन्टेक्स्ट (उदाहरण के लिए आपके ऐप में सिंगलटन के रूप में) या अल्पकालिक डेटाकॉन्टेक्स होने के बीच चयन करना चाहते हैं, तो मैं दूसरा चुनूंगा। मैं प्रत्येक ("कार्य की इकाई" के लिए डेटाकॉन्टेक्स्ट नया (और) जितना संभव हो उतना कम अवधि के लिए जीवित रखना सुनिश्चित करता हूं। नया डेटा कॉन्टेक्स्ट बनाना एक बड़ा मुद्दा नहीं है, क्योंकि वे मेटाडेटा को कैश करते हैं। लंबे समय तक रहने वाले डेटाकॉन्टेक्स्ट होने से आपको कई दुःस्वप्न मिलते हैं जब यह कई वस्तुओं को ट्रैक करना शुरू करता है।

+0

कार्य की +1 यूनिट यहां मुख्य वाक्यांश है। एक डेस्कटॉप एप्लिकेशन अभी भी विशिष्ट व्यापार लेनदेन कर रहा है जो काम की अलग इकाइयों में विभाजित और विभाजित किया जाना चाहिए।इन्हें डेटाकॉन्टेक्स्ट –

0

समस्या के साथ केवल एक डेटाकॉन्टेक्स्ट होने की समस्या यह है कि आपके पास एकाधिक खुले संपादन नहीं हो सकते हैं और केवल एक ही प्रतिबद्ध हो सकते हैं। बहुत से अनुप्रयोग मॉडल के लिए, यह एक गैर स्टार्टर है। इसलिए, मेरे पास पढ़ने के लिए एक सिंगलटन डेटाकॉन्टेक्स्ट है और प्रत्येक प्रतिबद्ध कार्रवाई के लिए एक बनाते हैं। अपडेट फ़ंक्शन ऑब्जेक्ट को रीड डेटाैकेंटेक्स्ट से सहेजने के लिए अलग करता है और उन्हें एक नई प्रतिबद्धता डेटाकॉन्टेक्स्ट से जोड़ता है, फिर डीसी चलाता है। परिवर्तन स्वीकार करें।

एकमात्र मुश्किल बात यह है कि अगर किसी ऑब्जेक्ट को जमा करने या जमा करने पर डालने पर अपडेट किया जाना चाहिए, तो ट्रैक रखने का एक तरीका है, और यदि आपके पास मानक ऑटो नंबर प्राथमिक कुंजी है या किसी संग्रह में प्रबंधन है तो कहीं कॉलम को क्या करना चाहिए अद्यतन बनाम सम्मिलित करने के लिए किस वर्ग के लिए चेक, यह दूर करने के लिए काफी छोटा है।

+0

के जीवन चक्र को नियंत्रित करना चाहिए ताकि पढ़ने के लिए दीर्घकालिक डेटाकॉन्टेक्स्ट खुला रखा जा सके। यह पुराना डेटा एकत्र करने का एक अच्छा तरीका है। हां, आप रीफ्रेश कर सकते हैं, लेकिन फिर आप डेटा को पकड़ने से कोई प्रदर्शन लाभ खो देते हैं। संदर्भों का उपयोग केवल तभी होता है जब आपको डेटा प्राप्त करने या रखने की आवश्यकता होती है, रिकॉर्ड रिकॉर्ड को सरल बनाता है, और इस बारे में चिंता करने की आवश्यकता नहीं है कि कोई ऑब्जेक्ट डालना या अपडेट किया जाना है या नहीं। (यदि आपके पास पहचान कॉलम है, तो आप इसकी सामग्री देख सकते हैं, वैसे भी .... अगर वहां लिखा नहीं गया है तो वहां कुछ भी नहीं है।) –

0

मुझे पता है कि यह धागा थोड़ा पुराना है, लेकिन अवांछित में हमारे पास वार्तालाप-प्रति-व्यवसाय ट्रांज़ेक्शन का कार्यान्वयन है। वर्तमान में हमारे पास निबर्ननेट के लिए केवल एक कार्यान्वयन है, लेकिन इसे लिंक से एसक्यूएल या इकाई ढांचे के लिए कार्यान्वित करना सरल होना चाहिए। इस list में मेरा उत्तर देखें।

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