मैं पहले पोस्टग्रेएसक्यूएल (एनजीपीएसक्यूएल प्रदाता) के साथ काम कर रहा ईएफ 5.0 कोड प्राप्त करने की कोशिश कर रहा हूं। मेरे पास NuGet के माध्यम से Npgsql 2.0.12.1 स्थापित है (संदर्भित असेंबली 2.0.12.0 हालांकि) है।इकाई फ्रेमवर्क 5.0 पोस्टग्रेएसक्यूएल (एनजीपीएसक्यूएल) डिफ़ॉल्ट कनेक्शन फैक्टरी
<entityFramework>
<defaultConnectionFactory type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
</entityFramework>
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider"
invariant="Npgsql"
description="Data Provider for PostgreSQL"
support="FF"
type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
</DbProviderFactories>
</system.data>
मैं निम्नलिखित है परीक्षण सफलतापूर्वक चल रहा है: मैं Npgsql app.config में घोषित (दोनों डिफ़ॉल्ट कनेक्शन कारखाने और प्रदाता कारखाना) है
[Test]
public void DatabaseConnection_DatabaseFactoryTest()
{
var factory = DbProviderFactories.GetFactory("Npgsql");
var conn = factory.CreateConnection();
conn.ConnectionString = _connectionString;
var npg = (NpgsqlConnection)conn;
var result = TestConnectionHelper(npg); // scalar select version(), nothing particular
Assert.AreEqual(result, "PostgreSQL 9.2.2, compiled by Visual C++ build 1600, 64-bit");
}
इसका मतलब है कि कम से कम डेटाबेस उदाहरण चल रहा है और प्रदाता है सफलतापूर्वक कॉन्फ़िगर किया गया है।
public class InventoryContext : DbContext
{
public InventoryContext(string nameOrConnectionString) : base(nameOrConnectionString)
{
}
// mappings and properties, cut for conciseness
}
के बाद परीक्षण में विफल रहता है:
[Test]
public void DatabaseConnection_DatabaseContextTest()
{
using (var ctx = new InventoryContext(_connectionString))
{
//var db = ctx.Database;
ctx.InventoryObjects.Add(_inventoryObject); // exception here
ctx.SaveChanges();
}
}
इसे कहते हैं
अब क्या मैं चाहता हूँ कस्टम डेटाबेस संदर्भ DbContext से विरासत में मिली एक ही प्रदाता से संबद्ध रहेगा जो और प्रारंभ कनेक्शन स्ट्रिंग के माध्यम से उपयोग करने के लिए हैFailed to set Database.DefaultConnectionFactory to an instance of the 'Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' type as specified in the application configuration. See inner exception for details.
आंतरिक अपवाद अमान्यऑपरेशन अपवाद है:
{"Constructor for type \"Npgsql.NpgsqlFactory\" is not found."}
मुझे लगता है कि वहाँ कनेक्शन स्ट्रिंग के साथ एक समस्या है (यह Npgsql प्रदाता शामिल नहीं है):
"Server=127.0.0.1;Port=5432;User Id=postgres;Password=p4ssw0rd;Database=InventoryDatabase;";
इस समस्या को हल करने के लिए प्रोग्राम के रूप में सबसे खूबसूरत तरीका क्या है? बस कनेक्शन को पार करने का प्रयास करें app.config से संदर्भ के कन्स्ट्रक्टर तक, यह काम करता है।
संपादित
ड्रॉपबॉक्स पर अपलोड किया गया परीक्षण परियोजना - VS2012 solution, 10 mb
हाय! यह अंतिम .1 nuget पैकेज में है क्योंकि मैं 2.0.12 पैकेज अद्यतन नहीं कर सका। पैकेज में एक लापता फाइल थी और मुझे इसे अपडेट करना पड़ा। लेकिन बाकी आश्वासन दिया कि Npgsql बाइनरी 2.0.12 संस्करण के समान है। :) क्या आप मुझे यह नमूना प्रोजेक्ट भेजना चाहते हैं ताकि मैं इसे देख सकूं? मुझे लगता है कि यह एनजीपीएसक्ल में एक बग हो सकता है जो एक कन्स्ट्रक्टर ईएफ की उम्मीद कर रहा है। मेरा ईमेल npgsql dor संगठन पर francisco है। अग्रिम में धन्यवाद। –
संस्करण कोई समस्या नहीं है हालांकि मुझे कुछ समय पता चला है कि रनटाइम के दौरान असेंबली क्यों नहीं मिली थी। बिंदु वास्तव में कनेक्शन स्ट्रिंग कॉन्फ़िगरेशन में है, खासकर मेरे उत्पादन वातावरण में तथ्य में मैं .config फ़ाइलों का उपयोग/संशोधित नहीं कर सकता (आईआईएस सीमाओं में प्रकाशित WPF XBAP एप्लिकेशन)। आपको कुछ घंटों में नमूना परियोजना भेज देगा। – Jaded
भेजे गए नमूना प्रोजेक्ट, अगर कोई और देखना चाहता है तो ड्रॉपबॉक्स डाउनलोड लिंक जोड़ा गया। – Jaded