7

Entity Framework と 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' の接続のプロバイダー名を特定できません。

私は何をすべきか?

4

1 に答える 1

4

に Npgsql プロバイダーを登録する必要がありますapp/web.config。Npgsql マニュアルのセクション3.4 Using Npgsql with ProviderFactory を参照してください。

データベース (MySQL、PostgreSQL など) 用の ADO.NET プロバイダーをインストールすると、通常、インストーラーはプロバイダー アセンブリを GAC に登録し、machine.config. プロバイダーをインストールせずにデプロイする場合は、プロバイダー アセンブリのコピーを含め (Npgsql アセンブリ参照をプロジェクトのローカル コピーとして設定)、app/web.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 アセンブリのバージョンと正確に一致していることを確認してください (または、バージョン/カルチャ/公開キー トークンを省略してください)。に Npgsqlの<Clear />エントリが既にあるマシンで実行している場合の競合を避けるためにありmachine.configます。明確にしなければ、例外が発生します。ただし、これは、アプリケーションで指定された他のプロバイダーに依存していないことも前提としていmachine.configます。

于 2012-08-20T06:49:04.407 に答える