Entity Framework 5.0 PostgreSQL (Npgsql) default connection factory

Ich versuche, EF 5.0-code erste arbeiten mit PostgreSQL (Npgsql Anbieter). Ich habe Npgsql 2.0.12.1 über NuGet installiert (referenzierte assembly ist 2.0.12.0 obwohl).
Ich habe Npgsql erklärt in der app.config (sowohl Standard-Verbindung Fabrik-und provider-Fabrik):

<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>

Habe ich folgenden test erfolgreich ausgeführt :

[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");            
}

Das bedeutet, dass mindestens die Datenbank-Instanz ausgeführt wird, und dem Anbieter ist erfolgreich konfiguriert.
Nun, was ich will, ist für das verwenden einer benutzerdefinierten Datenbank-Kontext geerbt von DbContext, die gebunden werden, um gleiche provider und initialisiert über connection string :

public class InventoryContext : DbContext
{
    public InventoryContext(string nameOrConnectionString) : base(nameOrConnectionString)
    {
    }
    //mappings and properties, cut for conciseness
}

Folgende test fehlschlägt :

[Test]
public void DatabaseConnection_DatabaseContextTest()
{
    using (var ctx = new InventoryContext(_connectionString))
    {
        //var db = ctx.Database;
        ctx.InventoryObjects.Add(_inventoryObject); //exception here
        ctx.SaveChanges();
    }
}   

Er sagt

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.

Innere Ausnahme InvalidOperationException :

{"Constructor for type \"Npgsql.NpgsqlFactory\" is not found."}

Ich denke, es ist ein problem mit dem connection-string (nicht enthalten Npgsql Anbieter) :

"Server=127.0.0.1;Port=5432;User Id=postgres;Password=p4ssw0rd;Database=InventoryDatabase;";

Was ist der eleganteste Weg, um dieses problem zu lösen programmgesteuert? Nur versucht vorbei connectionString aus der app.config Kontext Konstruktor, dann funktioniert es.

Bearbeiten

Hochgeladene test-Projekt zu Dropbox - VS2012-Lösung, 10 mb

  • Hi! Diese Letzte .1 in der nuget-Paket ist, da konnte ich nicht aktualisieren Sie die 2.0.12-Paket. Es war eine fehlende Datei im Paket und ich hatte zu aktualisieren. Aber seien Sie versichert, dass die Npgsql binary ist die gleiche wie die 2.0.12 version. 🙂 Würden Sie bitte senden Sie mir dieses Beispiel-Projekt, damit ich einen Blick auf Sie zu? Ich denke, dass dies möglicherweise ein bug in Npgsql, die möglicherweise fehlt ein Konstruktor, der EF ist zu erwarten hatte. Meine E-Mail ist francisco bei npgsql dor org. Vielen Dank im Voraus.
  • Version ist kein problem, obwohl ich verloren habe einige Zeit finden Sie heraus, warum die assembly wurde nicht gefunden während der Laufzeit. Der Punkt ist, das wirklich in der Verbindungszeichenfolge Konfiguration, vor allem in der Tatsache, in meiner Produktionsumgebung kann ich nicht benutzen/ändern .config-Dateien (WPF XBAP-Anwendung veröffentlicht, die im IIS-Einschränkungen). Senden Sie Beispiel-Projekt in wenigen Stunden.
  • Geschickt Beispiel-Projekt Hinzugefügt-dropbox-download-link, falls jemand schauen möchte.
InformationsquelleAutor Jaded | 2013-02-04
Schreibe einen Kommentar