2012-07-04 20 views
7

私はすでに、公式の指示でEntity FrameworkとPostgreSQLの使用について議論しているスレッドを見てきました。これらの命令は、インストールのたびに便利ではないため、インストールごとにgacutilを実行する必要があります。接続からEntity Framework + PostgreSQLを使用するには?

私がここでやりたいことは、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を参照してください。

データベース用のADO.NETプロバイダ(MySQL、PostgreSQLなど)をインストールする場合、インストーラは通常、GACにプロバイダアセンブリを登録し、machine.configにエントリを追加します。プロバイダをインストールせずに展開する場合は、プロバイダアセンブリのコピーを含める必要があります(プロジェクトのコピーローカルとしてNpgsqlアセンブリ参照を設定します)。

<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アセンブリのバージョンと正確に一致することを確認します(または、Version/Culture/PublicKeyTokenを省略)。 <Clear />には、既にmachine.configにNpgsqlのエントリがあるマシンで実行すると競合を避けることができます。明確でなければ、例外が発生します。ただし、これは、アプリケーションのmachine.configに指定されている他のプロバイダに依存していないことを前提としています。

関連する問題