मुझे यह त्रुटि क्यों हो रही है: निम्नलिखित EntitySet / AssociationSet - Entity1 के लिए कोई मानचित्रण निर्दिष्ट नहीं है?


96

मैं मॉडल प्रथम दृष्टिकोण के साथ Entity फ्रेमवर्क 4 का उपयोग कर रहा हूं।

मैंने प्रोजेक्ट शुरू किया, संस्थाओं को डिज़ाइन किया और डेटाबेस तैयार किया। सब कुछ ठीक रहा।

फिर मुझे वापस जाने और अपने मॉडल में एक और इकाई जोड़ने की आवश्यकता थी। हालाँकि, जब मैं EDMX में किसी इकाई को खींचता हूँ तो मुझे यह त्रुटि मिलती है:

यहां छवि विवरण दर्ज करें

ठीक है! मुझे बस Entity1 को एक तालिका में मैप करने की आवश्यकता है .. लेकिन हे! मैं मॉडल प्रथम दृष्टिकोण का उपयोग कर रहा हूं, मुझे उम्मीद है कि जब मैं डीडीएल उत्पन्न करूंगा तो मेरे लिए यह तालिका बनाई जाएगी।

मैं इस त्रुटि के आसपास कैसे काम करूं?


1
तो अपने मॉडल से डेटाबेस स्क्रिप्ट उत्पन्न कर सकते हैं?
लदिस्लाव मृंका

जवाबों:


147

इसका कारण यह है कि जिस तरह से EF4 मॉडल-प्रथम के साथ काम करता है।

जब आप पहली बार एक मॉडल-पहला मॉडल बनाते हैं, तो यह ऐसी स्थिति में होता है जिसमें SSDL मौजूद नहीं होता है। आप संस्थाओं को खींच सकते हैं, उन्हें जोड़ सकते हैं और आगे और फिर भी, यदि आप ईडीएमएक्स फ़ाइल पर एसएसडीएल पर एक नज़र डालते हैं, तो आप देखेंगे कि कोई भी संस्था एसएसडीएल में संबद्ध भंडारण तालिका नहीं है।

जब आप Generate Database From Modelसंदर्भ मेनू आइटम पर क्लिक करते हैं तो यह बदल जाता है । भ्रामक हिस्सा यह है कि यह क्रिया केवल DDL स्क्रिप्ट उत्पन्न करने से अधिक है। वास्तव में, यह SSDL जानकारी को शामिल करने के लिए EDMX फ़ाइल को बदलता है। इस बिंदु से, ईडीएमएक्स फ़ाइल एक राज्य में प्रवेश करेगी जिसमें डिजाइनर / सीएसडीएल में प्रत्येक इकाई को एसएसडीएल में एक इकाई के लिए मैप करना होगा। यदि कोई मैप नहीं करता है, तो यह एक संकलन समय त्रुटि को ट्रिगर करेगा:

निम्नलिखित EntitySet / AssociationSet के लिए कोई मानचित्रण निर्दिष्ट नहीं है (EntityName)

एक और दिलचस्प तथ्य यह है कि यह उस तरह की त्रुटि नहीं है जिससे संकलन रोका जा सके। यह वास्तव में, आउटपुट क्लास लाइब्रेरी उत्पन्न करेगा। यह एक चेतावनी या कुछ और नहीं होना चाहिए?

इस त्रुटि को रोकने के लिए, आपको एक नई इकाई डालने के बाद Generate Database From Modelफिर से करना होगा। यह SSDL को अपडेट करेगा और मैपिंग को ठीक करेगा।

संपादित करें

यदि आप मॉडल-प्रथम का उपयोग नहीं कर रहे हैं और आप "डेटाबेस से अपडेट" करते हैं, तो डीबी सर्वर में टेबल को डिलीट करने की स्थिति में भी आपको यह त्रुटि होगी। ऐसा इसलिए है क्योंकि Entity Framework आपके लिए इकाई को स्वचालित रूप से नहीं हटाएगा। इकाई को मैन्युअल रूप से हटाएं और त्रुटि दूर हो जाएगी।


1
मुझे bd परिवर्तनों के खिलाफ अपने मॉडल को अपडेट करने के बाद एक ही मुद्दा मिला (यह अच्छा नहीं हो सकता है, क्योंकि मेरा दृष्टिकोण मॉडल-प्रथम नहीं है)।
बाल्जा

5
@balanza, जब आप मॉडल-प्रथम का उपयोग नहीं कर रहे हैं और आप डेटाबेस के आधार पर अपने मॉडल को अपडेट करते हैं, तो आपको यह त्रुटि तब मिलेगी जब आप सर्वर में एक तालिका को हटा देंगे क्योंकि EF डिजाइनर स्वतः इकाई को नहीं हटाएगा। जब आप मैन्युअल रूप से इकाई प्रकार को हटाते हैं, तो त्रुटि दूर हो जाएगी
एन्द्र पेना

मैंने इकाई डेटा मॉडल के xml फ़ाइल में सीधे मेरा बदल दिया। मेरे पास टेबल और फ़ंक्शंस के ढेर थे और कुछ बेमेल का खतरा था इसलिए मैंने इसे मैन्युअल रूप से किया।
बाट_प्रोग्रामर

यह सुपर सहायक है। इसके अलावा, यदि आप मॉडल-प्रथम और "डेटाबेस से अपडेट" का उपयोग कर रहे हैं और नई तालिकाएं प्राप्त करते हैं, तो आपको त्रुटि भी होगी। लेकिन मॉडल से जेनरेट डेटाबेस चलाना (उत्पन्न स्क्रिप्ट को वास्तव में निष्पादित करने की कोई आवश्यकता नहीं है - यह आपके डेटा को मार देगा!) आपके कोड में मैपिंग के मुद्दों को ठीक कर देगा और आपको आगे जाकर इसका उपयोग करने में कोई समस्या नहीं होगी।
ब्रायन वॉरशॉ

1
आप पहले से तैनात SQL सर्वर CE डेटाबेस के लिए स्कीमा अद्यतन कैसे संभालेंगे? इसे एक अलग प्रश्न में स्थानांतरित कर सकते हैं, अगर यह पूरी तरह से असंबंधित प्रक्रिया है
FYK

35

मैंने पाया कि मुझे एक ही त्रुटि मिल रही थी क्योंकि मैं दो संस्थाओं के बीच संबंध बनाने के बाद रेफरेन्शल कंस्ट्रक्शन बनाना भूल गया था।


13
FYI करें: एसोसिएशन के गुणों की जाँच करें, और नीचे "रेफ़रेंशियल कॉन्सट्रेंट" खाली होगा। दीर्घवृत्त पर क्लिक करें और एक बाधा बनाएँ।
पैट्रिस कैल्वे

इससे मुझे मदद मिली। मुझे अपनी मूल इकाई से मेरी नेविगेशनल इकाई के लिए 1 .. * संबंध बनाना था।
duyn9uyen

21

3027 त्रुटि: निम्न एंटिटीसेट / एसोसिएशनसेट के लिए कोई मैपिंग निर्दिष्ट नहीं की गई ... "- एंटिटी फ्रेमवर्क सिरदर्द

यदि आप एंटिटी फ्रेमवर्क के साथ मॉडल विकसित कर रहे हैं तो आप कई बार इस कष्टप्रद त्रुटि में भाग सकते हैं:

3027 त्रुटि: निम्नलिखित EntitySet / AssociationSet [Entity या Association Name] के लिए कोई मानचित्रण निर्दिष्ट नहीं किया गया

इसका कोई मतलब नहीं है जब ईडीएम पर सब कुछ ठीक लगता है, लेकिन ऐसा इसलिए है क्योंकि इस त्रुटि का आमतौर पर ईडीएम से कोई लेना-देना नहीं है। इसे क्या कहना चाहिए "अपनी डेटाबेस फ़ाइलों को फिर से बनाएँ"।

आप देखते हैं, बिल्ड के दौरान एसएसडीएल और एमएसएल के खिलाफ एंटिटी चेक करता है, इसलिए यदि आपने सिर्फ अपना ईडीएम बदला है, लेकिन जेनरेटिंग डेटाबेस का उपयोग नहीं करते हैं ... तो यह शिकायत करता है कि आपकी sql स्क्रिप्ट में सामान गायब है।

इसलिए, संक्षेप में, समाधान यह है: " यदि आप अपना पहला मॉडल विकसित कर रहे हैं तो अपने ईडीएम को अपडेट करने के बाद हर बार डेटाबेस मॉडल तैयार करना न भूलें । मुझे आशा है कि आपकी समस्या हल हो गई है"।


यह एक ही त्रुटि के लिए काम करता है जेनरेट डाटाबेस मॉडल ने अपवाद को स्पष्ट करने में मदद की
kolexinfos

7

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


6

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

समस्या को हल करने के लिए, मैंने ईडीएमएक्स फ़ाइल में आक्रामक तालिका के संदर्भ को खोजने के लिए एक बाहरी संपादक (नोटपैड ++) का उपयोग किया, और फिर (सावधानी से) तालिका के सभी संदर्भ हटा दिए। मुझे यह कहते हुए खेद है कि मुझे नहीं पता कि पहली बार में ईडीएमएक्स फाइल इस राज्य में कैसे आई।


5

मेरे पास एक तालिका परिवर्तन था और इसने अंत में एक नंबर के साथ एक और इकाई बनाई (जैसे कि MyEntity1और एMyEntity edmx मॉडल ब्राउज़र द्वारा पुष्टिकरण के रूप ) के । दो संस्थाओं के बारे में कुछ ने मिलकर प्रसंस्करण को भ्रमित कर दिया।

तालिका को हटाना और इसे फिर से जोड़ना इसे तय किया।


ध्यान दें कि यदि टीएफएस हुक हो गया है, तो हटाए जाने के बाद ईएमएक्स का चेक-इन करें। तब और उसके बाद ही नवीनतम प्राप्त करें और एक निश्चित दो चरण प्रक्रिया में इसे फिर से जोड़ें। अन्यथा TFS उसी नामांकित संस्था (ies) के डिलीट और री-ऐड से भ्रमित हो जाता है जो समस्याओं का कारण लगता है।


टेबल चेंज के बाद मेरा भी यही मुद्दा था। मुझे मॉडल के तहत कई जगहों पर एक ही नंबर 1 और 2 (MyEntity1, MyEntity2) के साथ समान इकाइयाँ मिलीं। मैंने हर शाखा (डायग्राम, एंटिटी टाइप आदि) में देखा और MyEntity और MyEntity [n] के हर उदाहरण को हटा दिया। अच्छे उपाय के लिए मैंने एक "क्लीन सॉल्यूशन" किया और फिर डेटाबेस से केवल MyEntity को फिर से जोड़ने के लिए अपडेट किया।
MsTapp

4

मेरे लिए एक तेज़ तरीका था टेबल हटाना और उन्हें फिर से जोड़ना। इसने उन्हें ऑटो-मैप किया। :)


2

उन लोगों के लिए जो Database Firstएक नई इकाई को सम्मिलित करने के बाद आपको दृष्टिकोण का उपयोग कर रहे हैं, Generate Database From Modelफिर से अपनी .edmxफ़ाइल पर राइट क्लिक करके चयन करना हैGenerate Database From Model...


0

यह त्रुटि थी जब मैंने डेटाबेस से एक तालिका हटा दी थी। EDMX आरेख पर राइट क्लिक करके, गुण पर जाकर, गुण विंडो में सूची से तालिका का चयन करके, और इसे हटाकर (हटाएं कुंजी का उपयोग करके) आरेख से हल किया।


0
  1. समाधान एक्सप्लोरर पर जाएं, खोज बटन पर क्लिक करें
  2. दोनों को छोड़ दिया Search within file contentऔर जाँच कीSearch External Files
  3. ऐसी संस्थाओं का नाम लिखें, जिन्हें आपकी मैपिंग पहचान नहीं रही है।
  4. समस्या से संबंधित सभी फ़ाइलों को हटा दें। संभवत: उसी लापता इकाई के नाम पर उनका नाम रखा जाएगा। फ़ाइल पर अपने संदर्भ वर्ग के नाम के साथ कोई फ़ाइल न हटाएं, विशेष रूप से अगर उनके एक्सटेंशन .cs या .tt हैं। संदर्भ में .cs फ़ाइल
  5. लापता इकाई को संदर्भित कोड की सभी पंक्तियों को हटा दें। वे इस तरह दिखेंगे:

    public virtual DbSet< Entity1> Entity1 { get; set; }

यह त्रुटि डेटाबेस से हटाए गए तालिकाओं के लिए सामान्य है।

जब कोई डेटाबेस में एक टेबल गिराता है, या कोई बस बदलता है web.config.connectionStrings ईएफ़ मैप किए गए डेटाबेस के लिए केवल एक नया इंगित करने लिए , और मूल मैपिंग उत्पन्न करने के लिए उपयोग नहीं किया जाने वाला समस्या है।

यह 3027 त्रुटि के साथ इन संस्थाओं मौजूद नहीं है इस नए DB है।


0

मेरे पास त्रुटि थी जब मैं एक संग्रहीत प्रक्रिया के लिए एक कस्टम परिणाम बनाने की कोशिश कर रहा था और यह मान लिया कि यह एक इकाई होना चाहिए।

समाधान यह था कि मैंने अभी मॉडल ब्राउज़र में एक जटिल प्रकार बनाया और "फ़ंक्शन आयात संपादित करें" के परिणामस्वरूप इसे सौंपा।

मैं इसे यहां जोड़ दूंगा क्योंकि ऐसा लगता है कि यह प्रश्न है कि जब आपको यह त्रुटि मिलती है तो Google आपको कहां ले जाता है।


0

मैंने सब कुछ सही ढंग से निर्धारित किया था (कार्डिनैलिटी और आश्रित गुण), लेकिन यह पता नहीं लगा सका कि मुझे त्रुटि क्यों मिलती है। अंत में यह पता चला कि, EF ने अपने आप पर निर्भर तालिका में एक स्तंभ बनाया (table_tablecolumn) और इसका तालिका से कोई संबंध नहीं है, इसलिए कोई मानचित्रण निर्दिष्ट नहीं किया गया था। मुझे EDMX फ़ाइल में कॉलम को हटाना था और उस समाधान को फिर से बनाना था जिसने समस्या को ठीक किया। मैं DB दृष्टिकोण का उपयोग कर रहा हूँ।


0

डेटाबेस से अपडेट मॉडल मेरे लिए काम नहीं करता है।

मुझे विवादित संस्था को हटाना पड़ा, फिर डेटाबेस से अपडेट मॉडल निष्पादित करें, अंतिम रूप से समाधान का पुनर्निर्माण करें। उसके बाद, सब कुछ ठीक काम करता है।


0

अन्य लोगों के लिए इसे साझा करना। मेरे मामले में, हम एक साझा एमवीसी समाधान पर काम कर रहे थे, और टेबल के लिए एक सामान्य मॉड्यूल का उपयोग करके जो हम ड्रॉपडाउन के लिए उपयोग करते हैं। मुझे त्रुटि तब मिली जब मैंने एक नई तालिका जोड़कर इकाई मॉडल को अपडेट किया। यह पता चला है कि जब मैंने ईडीएमएक्स को अपडेट किया था, तो उसने संभवतः डेटाबेस पर अपने अधिकारों की पहुंच को अपडेट किया, जिसके परिणामस्वरूप उस निश्चित तालिका तक पहुंच नहीं थी, जो मुझे दे रही थी।no mapping specified

बस फिर से जोड़ने और मेरे उपयोगकर्ता तक पहुँच देने से समस्या हल हो गई।


0

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

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

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