2010-06-24 9 views
6

मैं अभी एमवीसीएम्यूजिकस्टोर ट्यूटोरियल found here के माध्यम से जा रहा हूं। यह कामकाजी स्रोत कोड के साथ एक उत्कृष्ट ट्यूटोरियल है। अब तक मेरे पसंदीदा एमवीसी v2 ट्यूटोरियल में से एक।क्या एडीओ.NET इकाई फ्रेमवर्क (एएसपी.नेट एमवीसी वी 2 के साथ) एक व्यावहारिक विकल्प है जब कस्टम और लगातार अद्यतन वेबसाइटें लिखती हैं?

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

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

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

क्या किसी ने इकाई फ्रेमवर्क के साथ पर्याप्त काम किया है ताकि वे यह कह सकें कि वे बहुत तरल विकास वातावरण में इसका उपयोग कर रहे हैं?

उत्तर

7

मैं अपने वर्तमान प्रोजेक्ट में लगभग एक वर्ष के लिए इकाई ढांचे (V1.0) का उपयोग कर रहा हूं। हमारे पास 100 टेबल हैं, सभी एडीएमएक्स में जोड़े गए हैं। समस्याएं जिनका हम सामना करते हैं (हालांकि यकीन नहीं करता है, तो नई इकाई ढांचे इन मुद्दों को हल)

  1. जब आप VS.net आईडीई के लिए उपयोग किया जाता है, तो आप /सब खींचें करने के लिए उपयोग किया जाएगा अपने आईडीई से संचालन ड्रॉप । समस्या यह है, एक बार अपने edmx मेजबान टेबल के 100s, आईडीई वास्तव में रुक जाता है और आप 3-4 मिनट के लिए प्रतीक्षा करने के लिए इससे पहले कि यह संवेदनशील

  2. इतने सारे टेबल के साथ हो जाता है के लिए होता है, आपके किसी संपादन कर edmx पर लंबे समय तक ले लो।

  3. जब आप एक संस्करण नियंत्रण का उपयोग करने जा रहे हैं, तो 10000 लाइन एक्सएमएल की तुलना काफी दर्दनाक है। 2 शाखाओं में विलय करने के बारे में सोचें जिनमें प्रत्येक 10000 लाइन edmx, टेबल, नया एसोसिएशन टेबल, हटाए गए एसोसिएशन और xmls की तुलना में आगे और आगे जा रहा है। आप एक अच्छा एक्सएमएल तुलना उपकरण की आवश्यकता होगी अगर आप गंभीर विलय 2 बड़े edmx फ़ाइलों

  4. प्रदर्शन कारणों से हम पड़ा CSDL, एम एस एल और एम्बेड किए गए संसाधन

  5. आपका edmx रूप SSDL बनाने के लिए के बारे में कर रहे हैं अपने डीबी के साथ सभी समय सिंक में होना होना चाहिए, या कम से कम , जब आप edmx अद्यतन करने के लिए प्रयास करते हैं, यह सिंक करने की कोशिश करेंगे और कुछ अस्पष्ट त्रुटियों फेंक सकती है अगर वे सिंक्रनाइज़ेशन से बाहर कर रहे हैं।

  6. , ध्यान रखें, अपने संस्थाओं (टेबल/विचार) हमेशा एक प्राथमिक कुंजी होना चाहिए कि रहो वरना आप अस्पष्ट त्रुटियों मिल जाएगा। मेरी other question here

बातें हम किया देखें/मैं जब टेबल तार्किक वर्गीकृत किया के लिए 1 edmx का उपयोग करके एफई

  1. उपयोग कई edmx का उपयोग कर भविष्य में विचार कर सकते हैं/एक साथ जुड़े हुए । इस तथ्य से अवगत रहें कि यदि आप ऐसा करते हैं, तो प्रत्येक edmx को अपने नामस्थान में रहना चाहिए। आप एक ही नाम स्थान में 2 edmx करने के लिए 2 से संबंधित तालिकाओं (कहते हैं व्यक्ति & पता) को जोड़ने का प्रयास हैं, तो आप एक संकलक करते हुए कहा कि विदेशी कुंजी संबंध पहले से ही है परिभाषित त्रुटि मिल जाएगा। (युक्ति: एक फ़ोल्डर बनाएं और इस फ़ोल्डर के अंतर्गत edmx बनाएं। आप फ़ोल्डर, यह ठीक से नाम स्थान अगली बार बचाने नहीं है कि आप खुला/यह edmx = में संपादित)

    fewer tables in edmx => less heavy 
    container => good 
    

    कम तालिकाओं> आसान बिना edmx में नाम स्थान में परिवर्तन करने का प्रयास करें मर्ज करने के लिए जब 2 शाखाओं

    विलय
  2. तथ्य यह है कि वस्तु के प्रति सचेत रहें संदर्भ सूत्र नहीं है सुरक्षित

  3. आपका फिर से सकारात्मक (या जो भी आप उपयोग करते हैं डीएओ) इसे बनाने वाले कंटेनर बनाने और निपटाने के लिए ज़िम्मेदार होना चाहिए। डी ढांचे का उपयोग करना, खासकर एक वेब ऐप में हमारे लिए जटिल चीजें। वेब अनुरोध थ्रेडपूल से परोसे जाते हैं और वेब अनुरोध के बाद कंटेनर को ठीक से निपटान नहीं किया गया था क्योंकि थ्रेड स्वयं का निपटारा नहीं किया गया था। कंटेनर का पुन: उपयोग किया गया (जब धागा का पुन: उपयोग किया गया) और बहुत सारे समरूपता मुद्दों को बनाया

  4. अपने वीएस आईडीई पर भरोसा न करें। एक्सएमएल संपादक प्राप्त करें और edmx फ़ाइल को संपादित करने का तरीका जानें (हालांकि आपको डिज़ाइनर को संपादित करने की आवश्यकता नहीं है)। अपने हाथ गंदे

  5. जाओ हमेशा हमेशा हमेशा एक एसक्यूएल प्रोफाइलर चलाने (सिर्फ यह पर्याप्त जोर नहीं कर सकते हैं) (और मैं एक और अपने कोड के हर कदम का मतलब) जब आप अपने प्रश्नों पर अमल। के रूप में जटिल क्वेरी दिखाई दे सकते हैं, तो आप कितनी बार आप डीबी उदाहरण मारा लगता है हैरान होंगे: (, सही स्वरूप में प्राप्त कोड के लिए माफी, असमर्थ कर सकते हैं किसी प्रारूप यह?)

    var myOrders = from t in context.Table where t.CustomerID=123 
    

    टी का चयन करें; // क्वेरी ऊपर अभी तक नहीं मार डाला

    if(myOrders.Count>0)//DB query to find count { var firstOrder = myOrders.First()//DB query to get first result }

    बेहतर दृष्टिकोण

    // क्वेरी डीबी को materialized, बस 1 हिट के रूप में हम myOrders = (संदर्भ में टी से ToList() वर उपयोग कर रहे हैं .tables जहां t.customerID = 123 का चयन करें टी) .सूची();

    if(myOrders.Count>0)//no DB hit 
    { 
    //do something 
    var myOrder = myOrders[0];//no DB hit 
    } 
    
  6. पता जब ट्रैकिंग और कोई ट्रैकिंग (के लिए केवल पढ़ने के लिए) और वेब एप्लिकेशन उपयोग करने के लिए एक बहुत लिखते हैं की तुलना में पढ़ता है। उन्हें ठीक से सेट करें जब आप अपने कंटेनर

  7. क्या मैं संकलित प्रश्नों को भूल गया?देखो here अधिक उपहार

  8. जब पंक्तियों के 1000s से वापस हो रही अपनी डीबी, सुनिश्चित करें कि आप IQueryable का उपयोग कर सकते हैं और के लिए detach the objectContext ताकि आप स्मृति से बाहर नहीं चला

अद्यतन:

Julie Lermansimilar solution के साथ एक ही समस्या को संबोधित करें। उनकी पोस्ट Ward के huge number of tables

+0

एक अन्य सूचनात्मक पोस्ट http://stackoverflow.com/questions/547278/what-are-good-design-practices-when-working-with-entity-framework – ram

+0

@ राम - इस तरह के एक विस्तृत पोस्ट के लिए धन्यवाद । मैं वास्तव में यह नहीं बता सकता कि क्या आप इकाई का उपयोग करने की वकालत कर रहे हैं या नहीं क्योंकि आप ईएफ का उपयोग कर रहे हैं लेकिन आप अपनी कुछ समस्याएं/सिरदर्द सूचीबद्ध करते हैं। आप निश्चित रूप से उन समस्याओं से बचने के लिए युक्तियां पोस्ट करते हैं (क्योंकि मैं ईएफ के लिए नया हूं, अभी तक मेरे लिए ग्रीक है।) कुल मिलाकर, क्या आप कह रहे हैं कि यह तेजी से नई तकनीक को लागू करने के लिए लायक है, अपने अनुसार सेटिंग? – quakkels

+0

इसके लिए जाएं। नवीनतम के लिए जाओ। और मैं यह देखने के लिए उत्सुक होगा कि मैं टी 4 का उपयोग कर सकता हूं (हालांकि यह सुनिश्चित नहीं है कि मैं एसक्यूएल को कस्टमाइज़ कर सकता हूं)। जब आप अपने ऑब्जेक्ट को "शामिल" करते हैं तो हमेशा पूछे जाने वाले प्रश्नों (और बाएं जुड़ते हैं) देखें। पुस्तकें/ब्लॉग्स और स्टैक्स ओवरफ्लो के साथ अपना ज्ञान अपडेट करें। लेन के कुछ महीनों के नीचे, आप एक ईएफ गीक होगा !! शुभकामनाएं – ram

1

मैं एंटिटी फ्रेमवर्क से बहुत परिचित नहीं हूं, लेकिन मेरा मानना ​​है कि यह केवल एक ईडीएम फ़ाइल उत्पन्न करता है जिसे हाथ से संपादित किया जा सकता है। मुझे पता है कि मैंने इसे लिंक-टू-एसक्यूएल डीबीएमएल फाइलों के साथ अक्सर किया है जो डिजाइनर उत्पन्न करता है (छोटे बदलावों के लिए डिजाइनर का उपयोग करने से उन्हें अक्सर संपादित करना तेज़ होता है)।

+0

से निपटने के लिए भी काम करती है। एक कोड-पीछे है जिसे foo.Designer.cs कहा जाता है। इस फ़ाइल को हाथ से संपादित किया जा सकता है लेकिन यह एक विशाल फ़ाइल है। मुझे यकीन नहीं है कि उस कोड के साथ गड़बड़ करना कितना यथार्थवादी है। मेरे पास हम्प्टी-डम्प्टी/किंग्स मेन ड्रीममेर्स हैं। – quakkels

+0

@quakkels - तो इसमें एक XML फ़ाइल नहीं है जिसमें इकाई मैपिंग है? लिंक-टू-एसक्यूएल के लिए एक डिजाइनर फ़ाइल भी है, लेकिन संबंधित एक्सएमएल फ़ाइल को संपादित करने से डिजाइनर फ़ाइल को स्वचालित रूप से पुन: उत्पन्न किया जा सकता है। –

+0

मुझे एक एक्सएमएल नहीं दिख रहा है। मैं गलत जगह पर देख रहा था लेकिन foo.edmx फ़ाइल है और जब मैं समाधान एक्सप्लोरर में उस संरचना का विस्तार करता हूं तो यह सी # कोड-पीछे बताता है। – quakkels

1

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

सैकड़ों या यहां तक ​​कि एक हजार टेबल वाले डेटाबेस पर ईएफ का उपयोग करने के बारे में क्या?

व्यक्तिगत रूप से, मैं कई डेवलपर्स और संगठनों को जानता हूं जिन्हें LINQ-to-SQL द्वारा जला दिया गया था और यह देखने के लिए कि एक दिशा क्या है, यह देखने के लिए एक साल या उससे भी अधिक समय तक रोक रहे हैं।

1

एंटिटी फ्रेमवर्क 4 (विजुअल स्टूडियो 2010 के साथ) से शुरू, जेनरेट कोड टी 4 (टेक्स्ट टेम्पलेट ट्रांसफॉर्मेशन टूलकिट) फाइलों से आउटपुट किया जाता है जिसे आप संपादित कर सकते हैं ताकि आपके द्वारा जेनरेट किए गए पर पूर्ण नियंत्रण हो। Oleg Sych's blog देखें जो टी 4 के बारे में जानकारी का एक खदान है। कोड जनरेशन कोई समस्या नहीं है और टी 4 इतने सारे दृष्टिकोण खोलता है कि मैं अब और नहीं रह सकता।

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

संपादित करें: अपने प्रश्न का उत्तर देने के लिए, यह ईएफ 4 है जिसका कोड पीढ़ी टी 4 समर्थन ईएफ के बजाय टी 4 पर आधारित है। ईएफ 3.5 (या यदि आप पसंद करते हैं तो ईएफ 1.0) पर, आप सिद्धांत रूप से टी 4 कोड को टी 4 कोड में ईडीएमएक्स फ़ाइल को पार्स करके और अपनी इकाइयों को उत्पन्न करके टी 4 का उपयोग कर सकते हैं। यह काफी काम होगा क्योंकि यह सब पहले ही ईएफ 4 द्वारा किया जा चुका है। प्लस, एंटिटी फ्रेमवर्क 3.5 केवल एक प्रकार की एंटीटी का समर्थन करता है, जबकि ईएफ 4 को पीओसीओ इकाइयों के लिए निर्मित या डाउनलोड करने योग्य टेम्पलेट्स (जो कुछ भी नहीं जानता दृढ़ता के बारे में), स्व-ट्रैकिंग संस्थाएं ...

इकाई फ्रेमवर्क को ध्यान में रखते हुए, मुझे लगता है कि इसकी पहली रिलीज में कई विशेषताओं की कमी थी, और उपयोग करने योग्य, उपयोग करने में काफी निराशाजनक थी। ईएफ 4 बहुत अधिक सुधार हुआ है। इसमें अभी भी कुछ मूलभूत सुविधाओं (जैसे enum समर्थन) की कमी है, लेकिन यह अब मेरी पसंद का डेटा एक्सेस लेयर बन गया है।

+0

जूलियन: क्या टी 4 ईएफ 1.0 के लिए समर्थन करता है? – ram