2009-08-02 10 views
5

के साथ मॉडल क्लासेस बनाना I Asp.net एमवीसी सीखने की कोशिश कर रहा हूं, इसलिए मैं this ट्यूटोरियल का प्रयास कर रहा हूं।Asp.net एमवीसी: LINQ से SQL

वे रिपोजिटरी पैटर्न के बारे में बात करते हैं और सीधे लिंक से एसक्यूएल को कॉल करने के बजाय किसी अन्य डेटा एक्सेस प्रौद्योगिकी में बदलना आसान है।

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

नोट: मैंने वास्तव में कभी नहीं समझा कि इस ट्यूटोरियल को पढ़ने से पहले एक इंटरफ़ेस कैसे काम करता है और यह अभी भी 100% स्पष्ट नहीं है। मैं अब इसे किसी वर्ग के लिए 'टेम्पलेट' के रूप में देखता हूं।

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

मेरा प्रश्न है: Ado.net EF में बदलने के लिए मुझे क्या करना चाहिए?

मुझे लगता है कि मुझे क्या करना चाहिए।

  • Movie.edmx फ़ाइल जोड़ें और इसे कॉन्फ़िगर करें (मेरी मूवी तालिका जोड़ें)।
  • IMovieRepository के आधार पर एक नई कक्षा लिखें और शायद इसे MovieEFRepository पर कॉल करें।
  • नियंत्रक कन्स्ट्रक्टर में मूवीईएफ रिपोजिटरी में पैरामीटर बदलें। यह पहली बात है जो मुझे अजीब लगता है क्योंकि ट्यूटोरियल में वे कहते हैं कि रिपॉजिटरी का उपयोग न करने से आप सभी नियंत्रकों को बदल सकते हैं यदि आप किसी अन्य डेटासोर्स में बदल जाते हैं। क्या मुझे मूवी रिपोजिटरी क्लास निर्दिष्ट करने के बाद भी हर नियंत्रक को बदलने की ज़रूरत नहीं है?
  • अंतिम समायोजन मुझे लगता है कि मुझे दृश्य बदलने के लिए करना है। चूंकि यह उत्पाद वर्ग का उपयोग कर रहा है जो लिंक से एसक्यूएल डिजाइनर द्वारा बनाया गया था। मुझे यकीन नहीं है कि मैं यह कैसे करने जा रहा हूं। मुझे लगता है कि मुझे कुछ ऑब्जेक्ट का उपयोग करना चाहिए जो डीबीएमएल फाइल पर निर्भर नहीं था?

अगर मुझे एएसपीनेट एमवीसी का थोड़ा सा सरल दृष्टिकोण है तो मुझे माफ़ कर दो। मैं एएसपीनेट वेब डेवलपमेंट के लिए बहुत रुचि के साथ वेब डिज़ाइनर हूं।

+1

अच्छा सवाल। –

उत्तर

1

आप अपने भंडार इंजेक्शन की वजह से decoupled हो सकता है, नहीं करता है, तो आप

public MoviesController() : this(new **MovieRepository**())

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

इसके साथ, आपके contoller के पास केवल एक कन्स्ट्रक्टर होगा, इंटरफेस वाला एक, और बदलने की आवश्यकता नहीं होगी।

अपनी इकाइयों के साथ आप नियंत्रकों के साथ ऐसा कर सकते हैं, प्रत्येक इकाई के लिए एक इंटरफ़ेस बनाएं और आईओसी पैटर्न का भी उपयोग करें, इसके साथ ही आपको केवल अपने आईओसी कंटेनर के लिए अपनी कॉन्फ़िगरेशन फ़ाइल बदलनी होगी।

यदि आप इन चीजों को नहीं करते हैं, तो आपका अधिकार, आपको जो कुछ भी कहा गया है उसे बदलने की आवश्यकता होगी।

मुझे उम्मीद है कि मदद! मेरी अंग्रेजी के बारे में खेद!

+0

उत्तर के लिए हैलो धन्यवाद। मैं आईओसी के बारे में पढ़ रहा हूं (जो आश्चर्यजनक रूप से अंतरराष्ट्रीय ओलंपिक समिति का मतलब नहीं है!) और ऐसा लगता है कि यह जाने का रास्ता है। मैं आईओसी कैसे समझता हूं कि आप इसे एक निश्चित इंटरफेस के लिए एक विशिष्ट वर्ग का उपयोग करने के लिए कह सकते हैं और क्योंकि सेटिंग्स को एक अलग फ़ाइल में संग्रहीत किया जाता है, यह वैश्विक समायोजन करना आसान है। मुझे परेशान करने वाली एकमात्र चीज यह है कि मुझे आईओसी के लिए अतिरिक्त ढांचे की आवश्यकता है और यह भी कि उनमें से एक से अधिक है। वैसे भी उत्तर के लिए धन्यवाद। – Pickels

6

तो पढ़ने के कुछ दिनों के बाद और बहुत सारे गुगलिंग के लिए मुझे यह काम करने के लिए मिला। सबसे पहले मैंने यह पता लगाने की कोशिश की कि आईओसी (नियंत्रण में उलटा) वास्तव में क्या मतलब है।

मुझे मिली पहली साइटों में से एक एकता के बारे में एक स्क्रीनकास्ट वाली वेबसाइट थी। नेट के लिए डीआई/आईओसी फ्रेमवर्क कौन सा है।

इसे देखकर अब यह वास्तव में एक बहुत अच्छा स्क्रीनकास्ट है और उदाहरण है कि यूनिटी और आईओसी/डीआई का उपयोग करना कितना आसान है। उस समय मैं इसे पूरी तरह से समझ में नहीं आया था इसलिए मैं आगे बढ़कर गुगल रहा था।

मार्टिन फाउलर में से एक वेबसाइट जो मैं चलती रही थी वह थी।

मेरे लिए, एक व्यक्ति को इस वेबसाइट नौसिखिया एक कोडन है कि सार करने के लिए एक छोटे से है। यह भी अजीब लग सकता है लेकिन उस वेबसाइट पर फ़ॉन्ट, लाइन-ऊंचाई और टाइपोग्राफी वास्तव में भयानक थी जिसने इसे पढ़ने के लिए और भी कठिन बना दिया।

अगली वेबसाइट जो मैंने पढ़ी थी वह विंडसर कैसल के बारे में थी क्योंकि अल्फ्रेडो फर्नांडेज़ ने कहा था कि इसका उपयोग करना आसान था।

प्रलेखन बुरा करने के लिए नहीं था, लेकिन मैं अपने Asp.net MVC आवेदन करने के लिए अपने "शुरू हो रही है" बुनियादी उदाहरण परिवर्तित कुछ समस्या थी। इसके शुरू होने से भाग 2 और 3 भी गायब थे।

इसके बाद मैंने यह देखने के लिए विभिन्न ढांचे की तलाश शुरू कर दी कि क्या मुझे वास्तव में मूल उदाहरण मिल सकता है। अगर मैंने पहले स्क्रीनकास्ट को फिर से देखा तो मैंने इसे बहुत जल्द तय कर दिया होगा लेकिन किसी भी तरह से मैंने इसका ट्रैक खो दिया है।

  • लिंक:Scott Hanselman: List of .NET DI Containers(IOC): .NET आईओसी समाधान के अधिकांश के साथ बहुत अच्छा ब्लॉग पोस्ट।
  • लिंक:Phil Haack: TTD and DI using Structure Map: एक्सएमएल कॉन्फ़िगरेशन फ़ाइल का उपयोग करना मेरे लिए जटिल था और मैं इसे काम नहीं कर सका।
  • लिंक: Andre Loker: ASPNET-MVC-with-Windsor-programmatic-controller-registration: इस उदाहरण को आजमाया नहीं। इसे देखकर अब मैं इसे काम करने में सक्षम हूं।
  • लिंक:MvcContrib: यह Asp.net एमवीसी को कार्यक्षमता जोड़ता है। इसमें 3 या 4 आईओसी कंट्रोलर फैक्ट्री भी हैं। मैं इसे काम नहीं कर सका, मुझे इसके बारे में बहुत सारे दस्तावेज भी नहीं मिला।

मुझे एक्सएमएल कॉन्फ़िगरेशन फ़ाइलों के साथ बहुत सी समस्याएं थीं और मैं उन्हें काम करने के लिए प्रतीत नहीं कर सका। मैंने विंडसर, स्ट्रक्चर मैप और स्प्रिंग.net की कोशिश की लेकिन मैं हमेशा एक्सएमएल फाइलों के साथ फंस गया।

इसलिए मैंने एएसपीनेट एमवीसी साइट पर जाने का फैसला किया क्योंकि यही वह जगह है जहां मैंने Asp.net एमवीसी के बारे में सीखना शुरू किया था। मैंने पहली स्क्रीनकास्ट और MIX09 प्रस्तुतिकरणों को बहुत स्पष्ट पाया और मुझे लगता है कि अधिकांश लोग किस बारे में बात कर रहे थे। स्टोरफ्रंट एप्लिकेशन का निर्माण करते समय मैं रोब कॉनरी द्वारा दूसरे स्क्रीनकास्ट पर फंस गया। क्योंकि मुझे रिपोजिटरी और आईओसी/डीआई के बारे में कुछ और पता था, मैंने सोचा था कि रॉब कॉनरी के स्क्रीनकास्ट को फिर से देखना शुरू करना एक अच्छा विचार होगा। स्क्रीनकास्ट में से एक में वह कोडप्लेक्स में सभी नमूनों को अपलोड करने के बारे में बात करता है।

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

मेरे वेबप्लिकेशंस के साथ प्रयास करने के बाद मैं फाइनल मेरे आवेदन (हुरेय) में काम करने के लिए संरचना मानचित्र प्राप्त करने में सक्षम था।

उसने मुझे दिखाया कि लिंक से एसक्यूएल में आने वाली मेरी उत्पाद कक्षा पर निर्भरता को कैसे ठीक किया जाए। वह एक अतिरिक्त वस्तु बनाता है जिसे लिंक प्रश्नों में "नया उत्पाद चुनें {}" द्वारा बुलाया जाता है।

वाह, यह उत्तर मेरी योजना से थोड़ा लंबा है, लेकिन मुझे उम्मीद है कि यह मेरे जैसे अन्य लोगों की मदद करता है जो कोडिंग और एएसपीनेट एमवीसी में बहुत नौसिखिया हैं।