इसमें एक DefiningQuery है लेकिन कोई InsertFunction तत्व नहीं है ... इरेटा


123

यह बात मुझे पागल कर रही है, और यह त्रुटि मेरे लिए काफी व्यर्थ है:

EntitySet 'TableB' को अपडेट करने में असमर्थ क्योंकि इसमें एक DefiningQuery है और वर्तमान ऑपरेशन का समर्थन करने के लिए तत्व में कोई तत्व मौजूद नहीं है।

मेरी टेबल इस तरह से लगाई जाती हैं:

TableA
इंट आईडीए (पहचान, प्राथमिक कुंजी)
...

TableB
int आईडीए (TableA.idA के लिए FK)
int val

TableB में SQL सर्वर में कोई प्राथमिक कुंजी परिभाषित नहीं है। एंटिटी फ्रेमवर्क ने तालिका और एसोसिएशन को आयात किया है और दोनों क्षेत्रों को कुंजी के रूप में सेट किया है। लेकिन यह उस त्रुटि को आउटपुट करेगा जब मैं तालिका में सम्मिलित करने की कोशिश करता हूं!

क्या गलत है??


संपादित करें: जैसा कि एलेक्स ने सुझाया था, समाधान यह था:

  1. Edmx फ़ाइल पर राइट क्लिक करें, Open with, XML Editor चुनें
  2. Edmx में इकाई का पता लगाएँ: StorageModels तत्व
  3. पूरी तरह से DefiningQuery निकालें
  4. स्टोर का नाम बदलें: स्कीमा = "डीबो" से स्कीमा = "डीबीओ" (अन्यथा, कोड यह कहते हुए एक त्रुटि उत्पन्न करेगा कि नाम अमान्य है)
  5. दुकान निकालें: नाम संपत्ति

मैंने कुंजी को वैसे ही छोड़ दिया, क्योंकि यह मेरे लिए ठीक था कि दोनों कॉलम कुंजी का हिस्सा हैं।


6
अपडेट के लिए धन्यवाद - चरण-दर-चरण निर्देशों ने इस EF newb को ASP.NET MVC ट्यूटोरियल ऐप को काम करने में मदद की!
एडम नील

इसके लिए Thnx! मुझे एक समस्या थी कि EF ने sql सर्वर 2000 टेबल के लिए उचित edmx फ़ाइल नहीं बनाई है जो कि प्राथमिक कुंजी है। लेकिन इस निर्देश ने मुझे बचा लिया :)
100r

4
3.5 साल बाद, और यह पोस्ट अभी भी ppl की मदद कर रही है, इस मामले में, ME! ... To: Palantir वर्णनात्मक चरण के लिए कदम (यह काम किया) और एलेक्स >>> ब्रावो के लिए धन्यवाद!
21

समाधान ने मेरे लिए काम किया .. धन्यवाद
Delavega

स्कीमा परिभाषा से "स्टोर:" हटा रहा था। बहुत अच्छा
गुहिलमे फेरेरा

जवाबों:


141

खैर जब एक प्राथमिक के बिना एक तालिका का सामना किया जाता है तो इसे एक दृश्य के रूप में माना जाता है।

और स्टोरेजमॉडल \ EntitySet [n] \ DefiningQuery तत्व में EDMX फ़ाइल (देखने के लिए एक XML संपादक में खोलें) में दृश्य दिखाई देते हैं।

जब आपके पास एक DefiningQuery होता है, तब तक इकाई आसानी से पढ़ जाती है जब तक कि आप संशोधन कार्य नहीं करते। आपको इन्सर्ट, अपडेट और डिलीट में से प्रत्येक के लिए 3 संशोधन फ़ंक्शन (उर्फ संग्रहीत प्रक्रियाएं) की आवश्यकता है।

लेकिन आपके पास दो विकल्प हैं:

मुख्य परिभाषा बदलें:

  1. और EF को विश्वास दिलाता हूं कि जो सोचता है वह वास्तव में एक तालिका है
  2. या उपयुक्त संशोधन कार्य जोड़ें

आपके मामले में मैं सलाह देता हूं (1)।


मुझे यह त्रुटि तब हुई जब मैं एक जंक्शन तालिका में एक इकाई जोड़ने की कोशिश कर रहा था। आपके सुझाव ने इसे तय किया, धन्यवाद!
वाल्टर स्टबोस

यह बहुत बढ़िया है ..., Tnks
मोहन गुंडलपल्ली

डेटाबेस से उत्पन्न आपकी .edmx फ़ाइल पर "डेटाबेस से अपडेट मॉडल" पर क्लिक करना न भूलें
बसर अबू शमा

मैं एक ही मुद्दे का सामना कर रहा हूँ, अजीब हिस्सा है, यह हमारे स्थानीय और परीक्षण वातावरण में ठीक काम कर रहा है, यह सिर्फ ग्राहक के वातावरण (सुस्त) पर काम नहीं कर रहा है
मोक्स शाह

13

बस तालिका में एक प्राथमिक कुंजी जोड़ें। बस। समस्या सुलझ गयी।

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

6

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


5

तालिका में प्राथमिक कुंजी जोड़ें, edmx मॉडल से मॉडल हटाएं, फिर डेटाबेस से अपडेट का चयन करें, निर्माण करें और चलाएं ...... काम करता है


1

@Palantir। सत्यापित करें कि आप दोनों तालिकाओं में प्राथमिक कुंजी सेट है, और एक तालिका में निर्धारित कई प्राथमिक कुंजी के साथ सावधान रहें।


0
  1. आपको नोटपैड या नोटपैड ++ या अपनी पसंद के किसी भी टेक्स्ट एडिटर में मैन्युअल रूप से .EDMX फ़ाइल खोलने की आवश्यकता है।
  2. Edmx में प्रविष्टि का पता लगाएँ: Step1 में खोली गई फ़ाइल में StorageModels।
  3. DefiningQuery तत्व का पता लगाएं और इस टैग को पूरी तरह से हटा दें।
  4. स्टोर ढूंढें: स्कीमा = "डीबो" टू स्कीमा = "डीबीओ" (यदि आप इस चरण को छोड़ देते हैं तो यह नाम की त्रुटि उत्पन्न करेगा अमान्य है)।
  5. फ़ाइल को सहेजें और बंद करें।

आशा है कि यह समस्या को हल करेगा।

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