web-dev-qa-db-ja.com

PostgresqlとEntityFramework

私のプロジェクトでは、PostgreSqlと一緒にEntityFrameworkを使用しようとしています。しかし、データベースに接続できません。エラーは発生しません。スタックするだけです。 app.configに問題があると思いますが、何が原因かわかりません。

App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="entityFramework" 
                 type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>
    <entityFramework>
        <defaultConnectionFactory type="Npgsql.NpgsqlFactory, Npgsql" />
        <providers>
            <provider invariantName="Npgsql" 
                      type="Npgsql.NpgsqlServices, Npgsql.EntityFramework"  />
        </providers>
    </entityFramework>
    <system.data>
        <DbProviderFactories>
            <add name="Npgsql Data Provider" invariant="Npgsql" 
                 description="Data Provider for PostgreSQL" 
                 type="Npgsql.NpgsqlFactory, Npgsql" />
        </DbProviderFactories>
    </system.data>
    <connectionStrings>
        <add name="Entities" 
             connectionString="server=localhost;user id=postgres;password=4321;database=postgis" 
             providerName="Npgsql" />
    </connectionStrings>
</configuration>

DbContext

public class Entities : DbContext
{
    public Entities() : base("Entities")
    {
    }

    //rest of the code
}

mycode.cs

using (var db = new Entities()) // when debug it stuck here and keep running 
{
 // some test code
}

編集:

次のエラーが発生します:
"不変の名前 'Npgsql'でADO.NETプロバイダーのアプリケーション構成ファイルに登録されているEntityFrameworkプロバイダータイプ 'Npgsql.NpgsqlServices、Npgsql.EntityFramework'を読み込めませんでした。アセンブリ修飾されていることを確認してください名前が使用され、実行中のアプリケーションでアセンブリを使用できること。

7
N.J

問題は、プロバイダータイプまたはアセンブリ名が間違っていることを示しています。

<entityFramework>
    <defaultConnectionFactory type="Npgsql.NpgsqlFactory, Npgsql" />
    <providers>
        <provider invariantName="Npgsql" 
                  type="Npgsql.NpgsqlServices, Npgsql.EntityFramework"  />
    </providers>
</entityFramework>

アセンブリ名が間違っています。 EntityFramework6.NpgsqlパッケージによってインストールされるアセンブリはEntityFramework6.Npgsql.dll。実際、パッケージを新しいプロジェクトに追加すると、正しいプロバイダー行が設定されます。

<providers>
  <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
9