2017-02-18 7 views
0

私は答えを見つけるためにこれにいくつかの方向性のかなりの時間を探しています。Postgres&C#:タイプNpgsql.NpgsqlConnectionFactoryを読み込めませんでした

.Net Entity Frameworkを使用してPostgreSQLに接続しようとしています(通常のSQL接続方法のまわりに私の独自のフレームワークを書くのではなく)。次のコード行をexeecutingで

、私は下に次のエラーが表示されます。

`using (var db = new dbTestContext()) 
{ 
var test = from a in db.dbTest select a; 
dataGridView1.DataSource = test.ToList();    
}` 

マイエラー: 外例外:

{"Failed to set Database.DefaultConnectionFactory to an instance of the 'Npgsql.NpgsqlConnectionFactory, Npgsql' type as specified in the application configuration. See inner exception for details."}

内部例外:

{"Could not load type 'Npgsql.NpgsqlConnectionFactory' from assembly 'Npgsql'.":"Npgsql.NpgsqlConnectionFactory"}

セットアップ: NugetPackaからnpgsqlをインストールしました。 Geマネージャー Nuget Package Managerからnpgsql用Entitiy Framework 6を​​インストールしました

私は次のApp.Configファイルを持っています(私の最初の投稿、まだフォーマットを正しくしようとしています)。

`<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
    <entityFramework> 
    <!--<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />-->  
    <defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, Npgsql" /> 
    <providers> 
     <!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />--> 
     <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" /> 
    </providers>  
    </entityFramework> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.2.1.0" newVersion="3.2.1.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <system.data> 
    <DbProviderFactories>  
     <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" /> 
    </DbProviderFactories> 
    </system.data> 
    <connectionStrings> 
    <add name="dbTestConnectionString" connectionString="Server=localhost;Database=dbTest;User Id=postgres;Password=Dve835167!;" providerName="Npgsql" /> 
    </connectionStrings> 
</configuration>` 

どれ方向が

+0

前のテキストが削除されました –

答えて

1

をいただければ幸い私が解決策を見つけたようです。 dbContextは接続文字列を介してデータベースインスタンスにリンクされていませんでした。ソリューションは、基本クラスのコンストラクタが呼び出される場所を以下に示します。

class dbTestContext: DbContext 
    { 

     //=below= connection string now has connection string identifier as argument 
     public dbTestContext() : base("dbTestConnectionString") { } 

     public DbSet<Test> dbTest { get; set; }  

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 

      modelBuilder.Entity<Test>().ToTable("tblTest", "public");    


      modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>(); 
     } 
    } 
} 

私がコメントする可能性がある場合:EFとLink2sqlの構文を使用して、(元の質問と同じ)単純なクエリの最初の実行が非常に遅いようだ - およそ3倍sqlconnectorとコマンド経由で直接SQLと同じくらい遅いです。ただし、これを2回目に実行するのは即時です(データベースに7行しかない)。これをさらに研究するだろう。

+0

EIDEでの速度に関する懸念は、(可能ならば)dbContextのインスタンス化に関連しているようです。 2つの別個のクエリを使用してテストされ、同じdbContext内の最初の実行のみがオーバーヘッドを表示しました。モジュール化されたdbContextを使用することも賢明です(エンティティ/テーブルが多数ある場合)。 –

関連する問題