2009-06-11 36 views
15

हमारे पास एक समाधान है जिसमें दो परियोजनाएं शामिल हैं - एक कंसोल एप्लिकेशन प्रोजेक्ट और एक वेब एप्लिकेशन प्रोजेक्ट। इनमें से प्रत्येक में स्कीमा में एक समान है, लेकिन अलग-अलग नामित .edmx फ़ाइल उसी डेटाबेस तक पहुंचने के लिए उपयोग की जाती है।इकाई फ्रेमवर्क त्रुटि - "EntityContainer नाम अद्वितीय होना चाहिए"

कंसोल एप्लिकेशन उसी सर्वर पर शेड्यूल किए गए कार्य के रूप में चलता है जैसे वेब एप्लिकेशन होस्ट किया जाता है। वेब एप्लिकेशन में कंसोल एप्लिकेशन का संदर्भ होता है क्योंकि वेब एप्लिकेशन के भीतर कुछ क्रियाएं कंसोल एप्लिकेशन में विधियों के कारण होती हैं। यह संयोजन कई महीनों के लिए सफलतापूर्वक हमारे स्टेजिंग वातावरण में चल रहा है।

जब जारी किया गया लाइव हम कम से कम दिन में एक बार निम्न त्रुटि संदेश देख रहे हैं:

स्कीमा निर्दिष्ट मान्य नहीं है। त्रुटियाँ:

ProjectName.csdl (3,4): त्रुटि 0019: EntityContainer नाम अद्वितीय होना चाहिए। 'ProjectEntities' नाम के साथ एक EntityContainer पहले से ही परिभाषित है। ProjectName.csdl (63,4): त्रुटि 0019: स्कीमा में प्रत्येक प्रकार का नाम अद्वितीय होना चाहिए। टाइप करें 'ProjectModel.DataSource' पहले से ही परिभाषित किया गया था। ProjectName.csdl (75,4): त्रुटि 0019: स्कीमा में प्रत्येक प्रकार का नाम अद्वितीय होना चाहिए। टाइप करें 'ProjectModel.Error' पहले से ही परिभाषित किया गया था।

यह जारी है, हमारी स्कीमा में सभी प्रकार के नाम सूचीबद्ध करता है।

यह त्रुटि एप्लिकेशन पूल रीसाइक्लिंग या आईआईएस को पुनरारंभ करके तय की जा सकती है।

कृपया ध्यान दें कि त्रुटि तब तक नहीं होती जब तक कि वेब एप्लिकेशन थोड़ी देर तक चल रहा न हो - यह तब नहीं होता जब हम संकलन करते हैं या पहली बार जब हम एप्लिकेशन तक पहुंचते हैं।

मेरा प्रारंभिक सिद्धांत यह था कि दो इकाई कंटेनर एक दूसरे के साथ विवाद कर रहे हैं क्योंकि वेब एप्लिकेशन कंसोल एप्लिकेशन का संदर्भ देता है, लेकिन उनके पास अलग-अलग नाम हैं, जो त्रुटि बनाता है "EntityContainer नाम अद्वितीय होना चाहिए। नाम के साथ एक EntantContainer 'ProjectEntities' पहले से ही "भ्रमित" परिभाषित किया गया है।

+0

इस लिंक को देखें [1]: http://stackoverflow.com/questions/4898794/the-entitycontainer-name-must-be-unique-in- अलग-assemblies, यह मेरे लिए काम करता है। मुझे आशा है कि आपकी मदद करें !! –

उत्तर

15

अतीत में इस समस्या का सामना करते समय, मैंने हमेशा एक तीसरी, साझा लाइब्रेरी बनाई है जिसमें इकाई मॉडल शामिल है - इस तरह से आप जानते हैं कि कोई नाम नहीं है, अगर आप एक नई टेबल जोड़ने का निर्णय लेते हैं मॉडल के लिए/कॉलम/विधि आपको केवल एक बार, आदि इत्यादि की आवश्यकता है

+0

यह वह दृष्टिकोण है जिसे हमने समस्या को हल करने के लिए लिया है। – ENX

+0

@ENX शायद आप इसे उत्तर के रूप में चिह्नित कर सकते हैं। – icelava

+0

@icelava - @ ENX का डेढ़ साल से अधिक नहीं देखा गया है :(आप उत्तर को मजबूत करने के लिए इसे हमेशा वोट दे सकते हैं;) –

2

यह त्रुटि तब होती है जब आपके पास एक एकल DLL या क्लास लाइब्रेरी प्रोजेक्ट में एक से अधिक इकाई model.edmx फ़ाइलें होती हैं। हालांकि त्रुटि के पीछे कारण मुझे ज्ञात नहीं है, आप इसे अन्य मॉडल को हटाकर या अन्य model.edmx फ़ाइल को दूसरी कक्षा लाइब्रेरी में ले जाकर इसे ठीक कर सकते हैं।

इसके अलावा पिछले dll का संदर्भ हटाने के लिए भूल जाते हैं न

2

ठीक है, मेरे मामले में मैं विभिन्न सॉफ्टवेयर वास्तुकला काम कर रहा हूँ, क्योंकि मैं विभिन्न परियोजनाओं (DLLs) है, वे एक ही डाटाबेस के लिए पहुँच है, लेकिन मैं अंदर अलग-अलग संस्थाएं हैं। इसलिए, जब मेरे पास ऐसी परियोजना में संदर्भ हैं जिनके लिए सभी या कम से कम दो की आवश्यकता है, तो मुझे यह त्रुटि

यदि मैं प्रत्येक पर इकाई कंटेनर नाम बदलता हूं, तो मैं समस्या हल करता हूं, लेकिन अब मेरी कनेक्शन स्ट्रिंग अलग है और मुझे संदर्भित प्रत्येक डीएल के लिए कॉन्फ़िगरेशन फ़ाइल में सभी कनेक्शन स्ट्रिंग्स को शामिल करना होगा।

24

उस बिन फ़ोल्डर पर जाएं और मैन्युअल रूप से dll और pdb फ़ाइल हटाएं।

+4

में मदद नहीं की यह मेरे लिए काम किया। मैंने एक कक्षा पुस्तकालय का नाम बदल दिया था और पुराना डीएल अभी भी बिन फ़ोल्डर में था। – wmcainsh

+0

यह मेरे लिए भी काम किया! –

+0

यह मेरे लिए भी काम करता है, मैंने फ़ोल्डर में मौजूद सभी पुराने डीएलएल को हटा दिया है जिसका उपयोग मैं अपने एप्लिकेशन को प्रकाशित करने के लिए कर रहा हूं। – ravithejag

0

नोट हटाए गए इकाई कंटेनर के लिए किसी इकाई कंटेनर का नाम बदलने का प्रयास करते समय, आपको अपने web.config या app.config में जाना होगा और कॉन्फ़िगरेशन सेक्शन कनेक्शन कनेक्शन को हटा देना होगा।

3

बस किसी और को बेताब है और कोई जवाब नहीं मिल रहा है - मैं गलती से परियोजना में शामिल मेरी .edmx फ़ाइल की एक प्रति के साथ समाप्त हुआ। दोनों को निर्माण में शामिल किया जा रहा था।

;-)

यदि यह आप का क्या हुआ, नहीं डर: आप पहले नहीं थे।

0

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

5

बदलें

metadata=res://MyProject/App_Code.AAA.csdl|res://MyProject/App_Code.AAA.ssdl|res://MyProject/App_Code.AAA.msl;provider=System.Data.SqlClient;provider connection string="data source=XXX;initial catalog=XXX;user id=XXX;password=XXX;multipleactiveresultsets=True;App=EntityFramework"" 
providerName="System.Data.EntityClient 
+0

यह मेरी स्थिति में पूरी तरह से काम करता है: एक एप्लिकेशन दो पुस्तकालयों (एक प्लगइन आर्किटेक्चर की तरह) का उपयोग करता है जिसमें दोनों एक ही मॉडल लाइब्रेरी के "ILMerged" संदर्भ शामिल हैं। बहुत बहुत धन्यवाद। –

0

को यह

metadata=res://*/App_Code.AAA.csdl|res://*/App_Code.AAA.ssdl|res://*/App_Code.AAA.msl;provider=System.Data.SqlClient;provider connection string="data source=XXX;initial catalog=XXX;user id=XXX;password=XXX;multipleactiveresultsets=True;App=EntityFramework"" 
providerName="System.Data.EntityClient 

से webconfig फ़ाइल इकाई कनेक्शन स्ट्रिंग प्रविष्टि मैं द्वारा EntityFramework 6.0 में यह समस्या ठीक।

  1. मॉडल के निर्माण के दौरान, मैं इकाइयों के नाम पर .edmx नाम देता हूं। यानी (MYDbEntities)

  2. निर्माण के बाद मैं MYDbEntities.Context.cs खोलता हूं और "इकाइयों" कक्षा को "MYDbEntities" में संशोधित करता हूं।

  3. app.config ओपन और कनेक्शन स्ट्रिंग
  4. ओपन MYDbEntities.Context.cs के लिए देखो और config से कनेक्शन स्ट्रिंग के लिए कनेक्शन स्ट्रिंग बदल जाते हैं। उदाहरण के लिए "MyDbConnection"
  5. सुनिश्चित करें कि कनेक्शन स्ट्रिंग की तरह इस

    मेटाडाटा = रेस है: // /MYDbEntities.csdl|res:// /MYDbEntities.ssdl|res://*/MYDbEntities .msl; प्रदाता = System.Data.SqlClient; प्रदाता कनेक्शन स्ट्रिंग = " डेटा स्रोत =।; प्रारंभिक कैटलॉग = आपका डीबी; सुरक्षा जानकारी जारी रखें = सही; उपयोगकर्ता आईडी = sa; पासवर्ड = Sw0rdf! sh; multipleactiveresultsets = True; अनुप्रयोग का नाम = EntityFramework "

नोट: मेरी संस्थाओं एक अलग DLL में रहता है।

उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे