ADO.NET एंटिटी फ्रेमवर्क: अपडेट विज़ार्ड टेबल नहीं जोड़ेगा


93

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

क्या यह बग है, या क्या कुछ परिस्थितियां हैं जहां एक तालिका को मॉडल (डिजाइन द्वारा) में जोड़ा नहीं जा सकता है?


अद्यतन: XML (* .edmx) समस्या को प्रकट करता है।

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
यह WAY अधिक वोट अप होना चाहिए। मुझे नहीं पता था कि Visual Studio तालिका को नहीं जोड़ सकता है क्योंकि .edmx फ़ाइल ही वह जगह है जहाँ त्रुटि वास्तव में जाती है। उम्मीद है कि उनके पास v2 में एक संवाद बॉक्स होगा!
जॉन Bubriski

+1 - मेरे मामले में, कोई त्रुटि संदेश नहीं था।
टेयून

जैसा कि आपने उल्लेख किया है कि आयात नहीं की जाने वाली तालिकाओं में प्राथमिक कुंजी नहीं होती हैं। एक पीके जोड़ें और आप जाने के लिए अच्छे हैं।
एरिक

जवाबों:


46

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

मुझे नहीं लगता कि ठीक यही स्थिति आप में है, लेकिन इससे आपको समाधान के लिए सामान्य विचार देना चाहिए: एक्सएमएल में जाएं और तालिकाओं के संदर्भ में प्रश्न देखें।


4
मुझे बस यह बहुत समस्या थी, मैंने मॉडल से एक तालिका को हटा दिया और जब मैं इसे फिर से जोड़ने के लिए गया तो दृश्य डिजाइनर ने इसे डेटाबेस में होने के रूप में नहीं दिखाया। इसे प्राप्त करने के लिए मैंने .edmx फ़ाइल से पाठ को हटा दिया, लेकिन XML को गड़बड़ करने में कामयाब रहा। यदि आप ऐसा करते हैं तो कृपया फ़ाइल को पहले वापस कर दें, बस मामले में। सौभाग्य से, मैं गड़बड़ अंतर के साथ गड़बड़ टैग को खोजने में सक्षम था।
ग्रैंडमास्टरफ्लश

41

सभी टेबल के लिए प्राथमिक कुंजी सेट करें या प्रत्येक तालिका के किसी भी कॉलम के लिए एक अनचेक किया गया चेक-बॉक्स "नल की अनुमति दें"। इससे मेरा काम बनता है :)


2
मेरा मानना ​​है कि यह सही उत्तर है, कम से कम यह मेरे लिए था। धन्यवाद!
एरिक

@Parvinder, मैंने अपने अधिकांश प्रोजेक्ट में इस मुद्दे पर संघर्ष किया है। आखिरकार, आपके जवाब ने मेरे लिए यह सब स्पष्ट कर दिया। मेरे मामले में, ज्वाइनिंग टेबल में मैंने नॉट नल की फील्ड या सिर्फ प्राइमरी की को निर्दिष्ट नहीं किया। इसे ठीक करने के बाद, मेरे मन में शांति थी। बहुत बहुत धन्यवाद
PatsonLeaner

मैंने जो संकल्प के साथ समझा, वह यह है कि यदि हम उस तालिका में प्राथमिक मॉडल में एक तालिका नहीं जोड़ सकते हैं तो उस तालिका में एक प्राथमिक कुंजी नहीं है या (ii) उस तालिका में कोई अनुमति शून्य स्तंभ नहीं है।
मुर्तुज़ा खान

10

1. तालिका संरचना को बदलें और एक प्राथमिक कॉलम जोड़ें। मॉडल को अपडेट करें।

2. XML संपादक में .EDMX फ़ाइल को संशोधित करें और इस विशिष्ट तालिका के लिए टैग के तहत एक नया कॉलम जोड़ने का प्रयास करें। (काम नहीं करेगा)

3. बाहर निकलने की मेज के लिए एक नया प्राथमिक कॉलम बनाने के अलावा, मैं सभी मौजूदा स्तंभों को शामिल करके एक समग्र कुंजी बनाऊंगा। (काम करें)

एंटिटी फ्रेमवर्क: डेटाटेबल को बिना किसी प्राथमिक कुंजी के एंटिटी मॉडल में जोड़ना।


मैं इसी मुद्दे में भाग गया। एंटिटी मॉडल तालिका को जोड़ रहा था, हालांकि, यह डिजाइनर में नहीं दिखा रहा था। मैं इसे कोड में भी एक्सेस नहीं कर सका। मैंने एक आईडी फ़ील्ड कुंजी जोड़ी ... काम किया!
रवि राम

6

मुझे भी यह समस्या थी, ऊपर वाले ने मेरे लिए काम नहीं किया। मेरे लिए क्या मदद की गई निम्नलिखित थी।

जब आप किसी डेटाबेस से जुड़ने की कोशिश करते हैं, तो डेटाबेस में अलग-अलग उपयोगकर्ता हो सकते हैं जिनके पास अलग-अलग क्रेडेंशियल होते हैं जो इसे स्वीकार कर सकते हैं। मान लीजिए कि उपयोगकर्ता A तक D।

यदि आप किसी उपयोगकर्ता से कनेक्ट करने का प्रयास करते हैं, तो सुनिश्चित करें कि उपयोगकर्ता के पास सही क्रेडेंशियल्स सक्षम हैं, इस मामले में, सक्षम विकल्पों को पढ़ें और लिखें।

ऐसा करने के लिए अपने SQL सर्वर से जुड़े MS SQL सर्वर प्रबंध स्टूडियो को शुरू करें और उस डेटाबेस का चयन करें जिसे आप विज़ुअल स्टूडियो में कनेक्शन बनाने का प्रयास करते हैं। 'Your_dbname' के तहत -> सुरक्षा -> उपयोगकर्ता आपको उपयोगकर्ताओं की एक सूची मिलते हैं। उन उपयोगकर्ताओं को राइट-क्लिक करें, जिनके साथ आप लॉगिन करने और गुणों का चयन करने का प्रयास करते हैं। एक खिड़की खुलती है। 'सामान्य' (डिफ़ॉल्ट रूप से चयनित) पृष्ठ चुनें और टैब के तहत 'डेटाबेस भूमिका सदस्यता' सुनिश्चित करें कि 'db_datareader' और 'db_datawrite' चयनित हैं।

नोट: जब आप बहुत अधिक एमएस SQL ​​सर्वर प्रबंधन स्टूडियो में प्रवेश करते हैं, तो सुनिश्चित करें कि आप एक उपयोगकर्ता के साथ लॉग इन करते हैं, जो इन विकल्पों को सक्षम / अक्षम कर सकता है ...


5

अपनी विशेष तालिका में 'नल' के लिए जाँच करें। यदि सभी कॉलम 'अनुमति दें नल' के लिए सेट हैं, तो एंटिटी फ्रेमवर्क इसे 'नल' तालिका मानता है। मुझे एक ही समस्या थी और 'अनचाहे अशक्त' को अनियंत्रित कर दिया और इसमें आवश्यक तालिका जोड़ दी।


1
यह काम करता है, बेवकूफ कोई त्रुटि और न ही चेतावनी लॉग में दिखाई देती है!
रोलैंडसीसी 23

3

प्राथमिक कुंजी के बिना तालिकाओं को नहीं जोड़ा जाएगा।


1

मेरा समाधान यह है कि मैं पूरे मॉडल को हटा दूं और इसे नई टेबल्स सहित पढ़ना चाहता हूं, जो मुझे चाहिए।

मैंने गलती से एक बार डिजाइनर में एक टेबल को हटा दिया और इसे पढ़ नहीं सका। इसलिए पूरे मॉडल को हटाने और इसे पढ़ने।

इसके साथ मेरे कुछ मुद्दे भी थे ( Ado.Net Entity Data Model Not Updating Correctly )


1

यह नवीनतम संस्करण (पर्यावरण: वीएस 2012, .नेट फ्रेमवर्क 4.5) में हल किया गया है। सरल .edmx फ़ाइल खोलें और आवश्यक तालिकाओं / संग्रहीत कार्यविधियों / विचारों को जोड़ें। तालिका / दृश्य जिसमें प्राथमिक कुंजी नहीं है, केवल तालिका / दृश्य पढ़ने के रूप में बनाई जाएगी।

तालिका / दृश्य 'TABLE_NAME' में प्राथमिक कुंजी परिभाषित नहीं है। कुंजी का अनुमान लगाया गया है और परिभाषा केवल पढ़ने के लिए तालिका / दृश्य के रूप में बनाई गई थी।


1
त्रुटि EF 5.0 में कुछ भी घटना में बनी हुई है
ग्रेग जेड।

0

आपको पूरे मॉडल को हटाने की आवश्यकता नहीं है (जो कि सैकड़ों टेबल हो सकते हैं!)।

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

SO: मॉडल (वैचारिक मोड) और Model.Store से प्रश्न में तालिकाओं को हटाएं, और फिर विज़ार्ड का उपयोग करके मॉडल को अपडेट करें, और प्रश्न में केवल तालिकाओं को फिर से जोड़ें।


0

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

मेरे पास एक प्राथमिक कुंजी है।

मैंने एक नई परीक्षा तालिका बनाई, जिसमें दिखाया गया था और यह मुझे इसकी जांच करने देगा लेकिन मेरा मूल नहीं।

मैंने इसे एक्सएमएल में पहले कभी नहीं खोला है और यह नहीं जानता कि यह कैसे करना है। आप सही .edmx फ़ाइल पर क्लिक करें और "साथ खोलें" - xml संपादक चुनें।

सवाल में मेज सब ठीक था, यह भी नए क्षेत्रों (अजीब) था।

मैंने इसे सभी संदर्भ हटा दिए (एक दो बार लिया) - आपके द्वारा एक को हटाने और सहेजने के बाद, यदि आप इसे खोलने का प्रयास करते हैं और यह प्रदर्शित नहीं होगा, तो बस आगे बढ़ें और "व्यू एक्सएमएल" चुनें - त्रुटियों को देखें और मूल रूप से देखें बाउंसिंग बॉल को तब तक फॉलो करें जब तक आप उसे साफ नहीं कर लेते।

उम्मीद है कि अतिरिक्त विस्तार से किसी को मदद मिलेगी।

जो


0

मेरे द्वारा पाया गया एक आसान तरीका (SQL सर्वर प्रबंधन स्टूडियो में) INT, प्रकार "अनुमति दें", और स्तंभ गुणों (ID की) के तहत ID पहचान टाइप करें (पहचान आईडी) >> चेक (पहचान करें), और करें निश्चित वेतन वृद्धि निर्धारित है।

एक बार ऊपर हो जाने के बाद, डेटाबेस से राइट-क्लिक, और अपडेट मॉडल पर अपनी .edmx विंडो पर वापस जाएं।


0

आप एक प्राथमिक कुंजी स्तंभ क्रॉस टेबल जोड़ सकते हैं। फिर समस्या हल हो रही है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.