2011-09-08 16 views
22

मैं एंटीटी फ्रेमवर्क 4 के साथ .NET MySQL कनेक्टर का उपयोग कर रहा हूं, और सबकुछ बढ़िया काम करता है लेकिन सर्वर पर तैनात होने पर मैं अपने अनुप्रयोग के साथ MySQL क्लाइंट DLL फ़ाइलों को पैकेज करना चाहता था, इसलिए हमारे पास नहीं है प्रत्येक सर्वर पर mysql स्थापित करने के बारे में चिंता करने के लिए, प्रत्येक एप्लिकेशन में केवल सही प्रतिलिपि होगी जिसकी आवश्यकता है।.NET MySQL कनेक्टर Conflicting DbProviderFactories

यह संभव बनाने के लिए, मुझे यकीन है कि MySQL के संदर्भ था "कॉपी स्थानीय" इसलिए सेट वे बिन फ़ोल्डरों में कॉपी किया जाएगा और मेरी app.config के लिए निम्न जोड़ा बनाया:

<system.data> 
    <DbProviderFactories> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 

यह काम करता है और मैं रिमोट सर्वर पर mysql इंस्टॉल किए बिना ऐप को तैनात करने में सक्षम हूं, लेकिन अब मुझे अपनी स्थानीय देव मशीन पर समस्या है (जहां मैं में MySQL कनेक्टर स्थापित है), और मुझे यह त्रुटि मिल रही है जब ईएफ कोशिश करता है कनेक्ट करें:

कॉलम 'InvariantName' अद्वितीय होने के लिए बाध्य है। मान 'MySql.Data.MySqlClient' पहले से मौजूद है।

यदि मैं ऊपर दिए गए एक्सएमएल को एप.कॉन्फिग में ऊपर जोड़ता हूं, तो त्रुटि दूर हो जाती है। ऐसा इसलिए है क्योंकि सिस्टम पर एक ही ड्राइवर स्थापित है और machine.config में है।

समाधान क्या है? मुझे उस प्रणाली के आधार पर मैन्युअल रूप से टिप्पणी करने और अनदेखा करने की आवश्यकता नहीं है जिसके लिए मैं आवेदन करता हूं।

उत्तर

43

अपने webconfig में < निकालें अपरिवर्तनीय = "MySql.Data.MySqlClient" /> जोड़ने के लिए प्रयास करें। अपने कंप्यूटर पर, आपने कनेक्टर को MySQL के लिए इंस्टॉल किया है और आपके machine.config को DbProviderFactories में कोई आइटम जोड़कर संशोधित किया गया है। तो यदि आप अपने web.config में एक और MySQL डेटा प्रदाता डालते हैं, तो ऐसा लगता है कि आप एक ही चीज़ को दो बार पंजीकृत करने का प्रयास कर रहे हैं।

<system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 
+1

सर्वर और स्थानीय मशीन दोनों पर पूरी तरह से काम करता है। धन्यवाद! – Kekoa

+1

मुझे यह समस्या भी थी, और यह एक आकर्षण की तरह काम करता था। मुझे लगा कि यह ऐसा कुछ होगा लेकिन invariant कीवर्ड को आजमाने की कोशिश नहीं करता था। –

+1

यह मेरे लिए भी काम किया! अनेक अनेक धन्यवाद :) – DigitalRayne

0

आप भी अपनी परियोजना के बिन फ़ोल्डर में C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.0 से सभी mysql DLLs कॉपी करने के लिए विचार कर सकते हैं। इस तरह से ईएफ 6 सभी आवश्यक MySQL कनेक्टर (MySQL.Data) उप-वर्गों तक पहुंच सकता है।

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