2012-07-04 5 views
7

Ich habe bereits Threads gesehen, die die Verwendung von Entity Framework und PostgreSQL mit offiziellen Anweisungen diskutieren. Diese Anweisungen müssen gacutil für jede Installation ausführen, die für Bereitstellungszwecke nicht so nützlich ist.Wie verwendet man Entity Framework + PostgreSQL von der Verbindung?

Was ich hier tun möchte, ist die PostgreSQL-Verbindung direkt an den DbContext-Konstruktor übergeben. Das ist genug für mich, weil ich CodeFirst ohne Designer verwenden werde. Das ist, was ich tue:

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

Aber mit dieser Methode erhalte ich ein NotSupportedException mit Nachricht:

kann nicht den Namen des Anbieters für die Verbindung vom Typ ‚Npgsql.NpgsqlConnection‘ bestimmen.

Was soll ich tun?

+0

Scheint für mich zu arbeiten – user007

Antwort

4

Sie müssen den Npgsql-Anbieter im app/web.config registrieren. Siehe Abschnitt 3.4 Using Npgsql with ProviderFactory des Npgsql-Handbuchs.

Wenn Sie einen ADO.NET-Provider für Datenbanken (MySQL, PostgreSQL usw.) installieren, registrieren die Installationsprogramme normalerweise die Provider-Assembly im GAC und fügen einen Eintrag zu machine.config hinzu. Wenn Sie ohne bereitstellen mögen, den Anbieter zu installieren, die Sie benötigen, um eine Kopie des Anbieter Baugruppe enthalten (Set Npgsql Montage Referenz als Copy Local für Ihr Projekt) und einen Eintrag in Ihrer Anwendung hinzufügen app/web.config wie folgt:

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

Stellen Sie sicher, dass die Version genau mit der Version der Npgsql Assembly übereinstimmt, mit der Sie bereitstellen (oder einfach die Version/Culture/PublicKeyToken weglassen). Die <Clear /> ist da, um Konflikte zu vermeiden, wenn auf einem Computer ausgeführt wird, der bereits Eintrag für Npgsql in seinem machine.config hat. Ohne das Clear würden Sie eine Ausnahme bekommen. Dies setzt jedoch voraus, dass Sie sich nicht auf andere Anbieter verlassen, die in der machine.config für Ihre Anwendung angegeben sind.

Verwandte Themen