2012-07-04 23 views
7

मैंने पहले से ही आधिकारिक निर्देशों के साथ इकाई फ्रेमवर्क और PostgreSQL के उपयोग पर चर्चा धागे देखा है। उन निर्देशों को प्रत्येक इंस्टॉलेशन के लिए gacutil चलाने की आवश्यकता है जो तैनाती के उद्देश्यों के लिए इतना आसान नहीं है।कनेक्शन से इकाई फ्रेमवर्क + PostgreSQL का उपयोग कैसे करें?

मैं यहां क्या करना चाहता हूं पोस्टग्रेएसक्यूएल कनेक्शन सीधे DbContext कन्स्ट्रक्टर को पास कर रहा है। यह मेरे लिए पर्याप्त है क्योंकि मैं डिजाइनर के बिना CodeFirst का उपयोग करने जा रहा हूं। यह मैं क्या कर रहा है:

public class Context : DbContext 
{ 
    Context(System.Data.Common.DbConnection connection) 
     : base(connection, true) 
    { 
    } 

    public static Context CreateContext() 
    { 
     NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=********;Database=xxx;"); 
     conn.Open(); 

     return new Context(conn); 
    } 
} 

लेकिन इस पद्धति का उपयोग मैं संदेश के साथ एक NotSupportedException मिलती है:

प्रकार 'Npgsql.NpgsqlConnection' के कनेक्शन के लिए प्रदाता नाम निर्धारित करने में असमर्थ।

मुझे क्या करना चाहिए?

+0

मेरे लिए काम करना प्रतीत होता है – user007

उत्तर

4

आपको app/web.config में Npgsql प्रदाता को पंजीकृत करने की आवश्यकता होगी। Npgsql मैन्युअल के सेक्शन 3.4 Using Npgsql with ProviderFactory देखें।

जब आप डेटाबेस (MySQL, PostgreSQL, आदि) के लिए ADO.NET प्रदाता स्थापित करते हैं तो इंस्टॉलर आमतौर पर जीएसी में प्रदाता असेंबली पंजीकृत करते हैं और machine.config में एक प्रविष्टि जोड़ते हैं। यदि आप प्रदाता को स्थापित किए बिना तैनाती करना चाहते हैं तो आपको प्रदाता असेंबली की प्रतिलिपि (अपने प्रोजेक्ट के लिए कॉपी लोकल के रूप में एनजीपीएसक्यूएल असेंबली संदर्भ सेट करें) और में एक प्रविष्टि जोड़ने की आवश्यकता होगी:

<configuration> 
    ... 
    <system.data> 
    <DbProviderFactories> 
     <clear /> 
     <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" /> 
    </DbProviderFactories> 
    </system.data> 
    ... 
</configuraiton> 

सुनिश्चित करें कि संस्करण आपके द्वारा तैनात Npgsql असेंबली के संस्करण से बिल्कुल मेल खाता है (या केवल संस्करण/संस्कृति/PublicKeyToken को छोड़ दें)। <Clear /> ऐसी मशीन पर चलने पर संघर्ष से बचने के लिए है जो पहले से ही machine.config में एनजीपीएसक्ल के लिए प्रवेश कर चुका है। स्पष्ट के बिना आपको अपवाद मिलेगा। हालांकि, यह भी माना जाता है कि आप अपने आवेदन के लिए machine.config में निर्दिष्ट किसी अन्य प्रदाता पर भरोसा नहीं कर रहे हैं।