मैं SQL dbml फ़ाइल में Linq कैसे अपडेट करूं?


जवाबों:


258

मॉडल को सिंक में रखने के तीन तरीके हैं।

  1. डिजाइनर से संशोधित तालिकाओं को हटाएं, और उन्हें डेटाबेस एक्सप्लोरर से डिजाइनर सतह पर वापस खींचें। मैंने पाया है कि, इसके लिए मज़बूती से काम करने के लिए, आपको यह करना होगा:

    ए। डेटाबेस एक्सप्लोरर में डेटाबेस स्कीमा को ताज़ा करें (राइट-क्लिक करें, रिफ्रेश करें)
    b। तालिकाओं को हटाने के बाद डिज़ाइनर को सहेजें
    c। तालिकाओं को वापस खींचने के बाद फिर से सहेजें।

    ध्यान दें कि यदि आपने किसी भी गुण को संशोधित किया है (उदाहरण के लिए, किसी एसोसिएशन की बाल संपत्ति को बंद करना), तो यह स्पष्ट रूप से उन संशोधनों को खो देगा - आपको उन्हें फिर से बनाना होगा।

  2. अपने डेटाबेस से स्कीमा को पुन: उत्पन्न करने के लिए SQLMetal का उपयोग करें। मैंने कई ब्लॉग पोस्ट देखे हैं जो दिखाते हैं कि यह कैसे स्क्रिप्ट करता है

  3. DBML के गुण फलक में सीधे परिवर्तन करें। यह साधारण परिवर्तनों के लिए काम करता है, जैसे किसी क्षेत्र पर नल की अनुमति देना।

DBML डिज़ाइनर Visual Studio 2015, 2017 या 2019 में डिफ़ॉल्ट रूप से स्थापित नहीं है। आपको वीएस को बंद करना होगा, वीएस इंस्टॉलर को शुरू करना होगा और अपनी स्थापना को संशोधित करना होगा। एसक्यूएल उपकरणों के लिए LINQ सुविधा आपको स्थापित करना होगा है। वीएस 2017/2019 के लिए, आप इसे व्यक्तिगत घटकों> कोड टूल के तहत पा सकते हैं ।


1
मैंने 1 बी के बिना 1 ए और 1 सी की कोशिश की थी और एक दृश्य पर एक साधारण चयन करते समय 'निर्दिष्ट कास्ट वैध नहीं है' त्रुटियां हो रही थीं। 1b सहित मेरे लिए इसे तय किया
tomfumb

6
वी.एस. समर्थन पर अनुरोध किया गया था connect.microsoft.com/VisualStudio/feedback/details/260723/... , लेकिन एमएस ठीक करने के लिए नहीं करना चाहती।
माइकल फ्रीजिम

पहली विधि की कोशिश की और यह काम किया। लगता है कि यह एक छोटे DB के लिए काम करेगा।
मुहम्मदी

यह मेरे लिए दुख की बात है कि 2019 के अंत में, मुझे एक उत्तर की आवश्यकता थी, इससे पहले कि मुझे पता था कि कंप्यूटर प्रोग्रामिंग क्या है ... यह इतना विस्तृत और महान है!
PSGuy

54

उदाहरण के लिए, जोड़े गए कॉलम के साथ अपने .dbml-diagram में एक तालिका को अपडेट करने के लिए, यह करें:

  1. अपनी SQL सर्वर एक्सप्लोरर विंडो को अपडेट करें।
  2. अपनी तालिका का "नया" संस्करण .dbml-diagram (नीचे चित्र में रिपोर्ट 1) खींचें।

रिपोर्ट 1 तालिका का नया संस्करण है

  1. तालिका के नए संस्करण में जोड़े गए कॉलम को चिह्नित करें, जोड़े गए कॉलम को कॉपी करने के लिए Ctrl+ दबाएं C

जोड़े गए कॉलम को कॉपी करें

  1. अपनी तालिका के "पुराने" संस्करण पर क्लिक करें और तालिका के पहले से मौजूद संस्करण में जोड़े गए कॉलम को चिपकाने के लिए Ctrl+ दबाएं V

जोड़े गए कॉलम को टेबल के पुराने संस्करण में पेस्ट करें


4
यह सबसे आसान, कम से कम विनाशकारी तरीका प्रतीत होता है जिसके लिए कोई अतिरिक्त उपकरण की आवश्यकता नहीं होती है और वीएस २०१ easiest में ठीक काम करता है
टॉबी: ’

1
यह स्वीकृत उत्तर की तुलना में बहुत कम घुसपैठ है और 2018 के अंत में अच्छी तरह से काम करना जारी रखता है!
मार्क

1
यह स्कीमा के त्वरित (और नहीं-तो-त्वरित संपादन के लिए) सबसे अच्छा उत्तर है। मैंने मॉडल दृश्य को अच्छा बनाने में बहुत समय लिया है। मुझे अद्यतन फ़ाइलों को हटाने और खींचने से नफरत है। अतिरिक्त क्षेत्रों के लिए यह बहुत अच्छा काम करता है!
हैकर

1
मेरे लिए, इसने दो समस्याओं को हल किया। पहले एक था जब मैंने मेज के भीतर एक समान क्षेत्र को कॉपी और पेस्ट करने का प्रयास किया और फिर उसका नाम बदल दिया। वैरिफाई करते समय नॉन-स्टॉप "अनिर्दिष्ट" बिल्ड एरर। दूसरा मुद्दा यह था कि अगर मैंने टेबल को हटा दिया और फिर इसे पूरी तरह से वापस जोड़ दिया, तो इससे गिट में बहुत अधिक अंतर हो गया (क्योंकि ऑब्जेक्ट को फ़ाइल के भीतर पुन: व्यवस्थित किया गया था)। इस पद्धति के साथ, मैं केवल नए क्षेत्र के सम्मिलन को देखता हूं, जो बाद में समझने में बहुत साफ और आसान है।
ggg

BTW, "हाँ" पर क्लिक करने की आवश्यकता है जब यह आपको संकेत देता है कि "आप जिन वस्तुओं को डिज़ाइनर से जोड़ रहे हैं वे डिज़ाइनर से अलग डेटा कनेक्शन का उपयोग करते हैं ..."
Eitanmg

5

आप कोडस्मिथ पर आधारित कोड जेनरेशन टेम्प्लेट के PLINQO सेट की भी जांच कर सकते हैं , जो आपको लाइनक-से-SQL के लिए बहुत सी साफ-सुथरी चीजें करने की अनुमति देता है:

  • प्रति फ़ाइल एक फ़ाइल उत्पन्न करें (एकल, विशाल फ़ाइल के बजाय)
  • अपने मॉडल को आवश्यकतानुसार अपडेट करें
  • कई और विशेषताएं

Http://www.plinqo.com पर PLINQO साइट देखें और परिचय वीडियो देखें।

दूसरा उपकरण जो मुझे पता है, वह है हुगति DBML / EDMX उपकरण , जो DBML (Linq-to-SQL) और EDMX (Entity Framework) मैपिंग फ़ाइलों को अपडेट करने की अनुमति देता है, और अधिक (जैसे नामकरण परंपराओं आदि)।

न घुलनेवाली तलछट


सिर्फ कोडस्मिथ / PLINQO को समाप्त करने के बाद मैं दृढ़ता से इस दृष्टिकोण को लेने के खिलाफ सलाह देता हूं । दी यह जवाब 4 साल से अधिक पुराना है ...
याकूब

@ इस समय: इस बिंदु पर, मैं दृढ़ता से लाइन-टू-एसक्यूएल का उपयोग करने के खिलाफ दृढ़ता से सलाह दूंगा - इसके बजाय एंटिटी फ्रेमवर्क का उपयोग करें, बहुत बेहतर विकल्प!
marc_s

हाँ यही है। यह पुष्टि करने के बाद कि एप्लिकेशन PLINQO के बजाय एक सादे DBML के साथ काम करेगा, EF के लिए आगे बढ़ना एक अगला कदम था जो मैंने एक पुराने एप्लिकेशन को डस्ट करने में लिया था।
युक डे

4

हम एक कस्टम लिखित T4 टेम्प्लेट का उपयोग करते हैं जो हमारे सभी .DBML फ़ाइलों में प्रत्येक तालिका के लिए info_schema मॉडल पर गतिशील रूप से प्रश्न करता है, और फिर डेटाबेस से ताज़ा स्कीमा जानकारी के साथ .DBML फ़ाइल के कुछ हिस्सों को अधिलेखित करता है। मैं हूं अत्यधिकइस तरह से एक समाधान को लागू करने की सलाह देते हैं - इसने मुझे समय के oodles को बचाया है, और अपने टेबल को अपने मॉडल से हटाने और फिर से जोड़ने के विपरीत जो आपको अपने संघों को रखने के लिए मिलता है। इस समाधान के साथ, जब आपका स्कीमा बदलता है, तो आपको संकलन-समय की त्रुटियाँ मिलेंगी। आप यह सुनिश्चित करना चाहते हैं कि आप एक संस्करण नियंत्रण प्रणाली का उपयोग कर रहे हैं, क्योंकि अंतर करना वास्तव में आसान है। यदि आप DB स्कीमा पहले दृष्टिकोण के साथ विकसित कर रहे हैं तो यह एक बढ़िया समाधान है। बेशक, मैं अपनी कंपनी का कोड साझा नहीं कर सकता, इसलिए आप इसे स्वयं लिखने के लिए अपने दम पर हैं। लेकिन अगर आप कुछ लाइनक-टू-एक्सएमएल जानते हैं और स्कूल जा सकते हैंइस परियोजना पर , आप जहाँ होना चाहते हैं, वहाँ पहुँच सकते हैं।


2

मैं VS2008 में निर्मित विज़ुअल डिज़ाइनर का उपयोग करने की सलाह दूंगा, क्योंकि dbml को अपडेट करने से आपके लिए उत्पन्न कोड भी अपडेट हो जाता है। दृश्य डिजाइनर के बाहर dbml को संशोधित करने से अंतर्निहित कोड सिंक से बाहर हो जाएगा।


4
हाँ, लेकिन VS2008 में विज़ुअल डिज़ाइनर आपके अंतर्निहित डेटाबेस में बदलावों का पता नहीं लगा सकता है और इसका जवाब नहीं दे सकता है :-( हटाने और पुनः जोड़ने का संक्षिप्त तरीका, आपके मॉडल को अपडेट करने के लिए कोई समर्थन नहीं है :-(
marc_s

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

2

तालिकाओं को अद्यतन करने के लिए DBML को अद्यतन करने के लिए एक बारीकियों की जरूरत है ... यदि मौजूदा तालिकाओं में परिवर्तन किए जाते हैं, तो विदेशी कुंजी संबंधों को तुरंत हमेशा नहीं लाया जाता है। आसपास का काम परियोजना का निर्माण करना है और फिर से तालिकाओं को फिर से जोड़ना है। मैंने MS को इसकी सूचना दी और इसे VS2010 के लिए तय किया गया।

डीबीएमएल डिस्प्ले नए विदेशी कुंजी बाधाओं को नहीं दिखाता है


ध्यान दें कि मुख्य उत्तर में दिए गए निर्देश स्पष्ट नहीं हैं। तालिका को अद्यतन करने के लिए

  1. Dbml डिज़ाइन की सतह को खोलें
  2. राइट-> क्लिक-> सभी का चयन करें या के साथ सभी तालिकाओं का चयन करें CTRLa
  3. CTRLx (कट गया)
  4. CTRLv (पेस्ट)
  5. समाधान सहेजें और पुनर्निर्माण करें।

मैं, विश्वास नहीं है वह निश्चित होती है क्योंकि संबंधित connect.microsoft.com/VisualStudio/feedback/details/414601/... निश्चित नहीं है
माइकल Freidgeim

क्या आप कट या पेस्ट करने से पहले या बाद में अपने बदलाव करते हैं?
कोलोब कैनियन

10 साल हो गए ... लेकिन मेरा मानना ​​है कि यह पहले है ... बदलाव करें फिर # 2 पर जाएं।
Ωमेगामैन

1

संग्रहीत कार्यविधि अद्यतन के मामले में, आपको इसे .dbml फ़ाइल से हटा देना चाहिए और इसे फिर से लिखना चाहिए। लेकिन अगर संग्रहीत प्रक्रिया में दो पथ हैं (उदाहरण: यदि कुछ है; तो कुछ कॉलम प्रदर्शित करें; और कुछ अन्य कॉलम प्रदर्शित करें), सुनिश्चित करें कि दोनों पथों में समान स्तंभ हैं !!! अन्यथा केवल पहला पथ कॉलम मौजूद होगा।


0

यहां पूरी तरह से चरण-दर-चरण विधि है जो मेरे लिए काम करती है ताकि LINQ को SQL dbml और संबंधित फ़ाइलों को अपडेट करने के लिए एक नया कॉलम शामिल किया जा सके जिसे मैंने डेटाबेस तालिकाओं में से एक में जोड़ा था।

आपको अपने डिज़ाइन की सतह में बदलाव करने की आवश्यकता है जैसा कि ऊपर अन्य ने सुझाव दिया है; हालाँकि, आपको कुछ अतिरिक्त कदम करने की आवश्यकता है। ये हैं पूर्ण चरण:

1. Drag your updated table from Server Explorer onto the design surface

2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)

3. Delete the "new" table that you just dragged over

4. Click and highlight the stored procedure, then delete it

5. Drag the new stored procedure and drop into place.

6. Delete the .designer.vb file in the code-behind of the .dbml 
   (if you do not delete this, your code-behind containing the schema will
    not update even if you rebuild and the new table field will not be included)

7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.