2009-02-16 14 views
6

मेरे पास एक एएसपी.नेट एमवीसी ऐप है जो एंटीटी फ्रेमवर्क के माध्यम से SQLite डेटाबेस का उपयोग कर रहा है। सब कुछ वीएस 2008 के स्थानीय विकास वेबसर्वर पर काम करता है।इकाई फ्रेमवर्क + SQLite परिनियोजन

लेकिन, मेरा सेवा प्रदाता के लिए वेब अनुप्रयोग की तैनाती इस त्रुटि का कारण बनता है:

[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.] 
    System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1308959 
    System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35 

सेवा प्रदाता टिप्पणी की है कि वे SQLite समर्थन नहीं करते। हालांकि मैंने SQLite सेवा प्रदाता की सेटिंग्स से स्वतंत्र है क्योंकि यह ऐप_Data तैनाती योग्य है।

क्या किसी को एक सफल इकाई फ्रेमवर्क + SQLite परिनियोजन का अनुभव है?

चीयर्स, -pom-

उत्तर

0

आप अपने आवेदन के बिन निर्देशिका के लिए आवश्यक DLL (रों) जोड़ने की कोशिश की है? आप स्वचालित रूप से ऐसा करने के तरीकों के लिए Bin Deploying ASP.NET MVC पर फिल हैक के आलेख को देखना चाहेंगे।

+0

हाय, उत्तर के लिए धन्यवाद। हां, मैंने फिल के ब्लॉगपोस्ट को देखा है। मैं सामान्य एएसपी.नेट एमवीसी ऐप को ठीक से तैनात कर सकता हूं। यह एंटिटी फ्रेमवर्क + एसक्यूएलसाइट के साथ संयोजन है जो समस्याग्रस्त है। मैंने System.Data.Entity.dll और System.Data.SQLite.dll दोनों को बिन फ़ोल्डर में ऊपर उठाया है। अभी तक कोई भाग्य नहीं है। – Pompair

+1

हमम। क्या वे वेब असेंबली में आपके असेंबली सेक्शन में हैं? – tvanfosson

12

आप यह अब और पढ़ने होने की संभावना नहीं हैं, लेकिन आप (, web.config या आप के लिए,) अपने app.config में निम्नलिखित छूट रहा है:

<configuration> 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="System.Data.SQLite" /> 
     <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
      description=".Net Framework Data Provider for SQLite" 
      type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> 
    </DbProviderFactories> 
    </system.data> 
</configuration> 

विशेष रूप से, अगर आप अपनी वेबसाइट में लिंक की गई लाइब्रेरी में स्क्लाइट का उपयोग करके, आपको इसे वेबसाइट की कॉन्फ़िगरेशन फ़ाइल में जोड़ना होगा - लाइब्रेरी नहीं! यह कारण है कि आप प्रदाता को कैसे लोड कर रहे हैं: अनिवार्य रूप से, आप रनटाइम पर निर्धारित कर रहे हैं जो "System.Data.SQLite" स्ट्रिंग का उपयोग करके लोड करने के लिए dll लोड कर रहा है, और उपयुक्त प्रदाता का पता लगाने से प्रविष्टि की सेटिंग्स का उपयोग किया जाता है सभा।

संपादित करें: वैसे, जब आप पुस्तकालय एक SQLite dependancy है कि लिख रहे हैं, तो आप इस जटिलता से बच सकते हैं। रनटाइम पर स्क्लाइट देखने के लिए आपको DbProviderFactories का उपयोग करने की आवश्यकता नहीं है; आप एक संकलन-समय निर्भरता भी ले सकते हैं, जिसे प्रबंधित करना आसान हो सकता है। तो फिर तुम ऊपर app.config खंड की उपेक्षा कर सकते, और बदले की सभी आवृत्तियों की जगह:

DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection() 

, तो आप एक सादे पुस्तकालय कॉल का उपयोग कर रहे कनेक्शन बनाने के लिए साथ

System.Data.SQLite.SQLiteFactory.Instance.CreateConnection() 

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

+1

उत्तर के लिए धन्यवाद ... – Funky81

+0

धन्यवाद। यह मेरे लिए भी काम करता है: एक डब्ल्यूपीएफ एप्लिकेशन में जो SQLite डेटा एक्सेस के साथ क्लास लाइब्रेरी का संदर्भ देता है। –

0

SQLite को एएसपी.NET एप्लिकेशन परिनियोजन के लिए पूर्ण विश्वास अनुमति की आवश्यकता है। कई साझा होस्टिंग प्रदाता इसे अनुमति नहीं देते हैं। आप इसे जांचना नहीं चाहेंगे।

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