2017-02-18 22 views
0

Я искал довольно некоторое время для некоторого направления на этом .., чтобы найти ответ.Postgres & C#: Не удалось загрузить тип Npgsql.NpgsqlConnectionFactory

Пытается подключиться к PostgreSQL с помощью .net Entity Framework (кажется разумным, вместо написания моей собственной структуры вокруг обычного метода соединения sql).

На exeecuting следующие строки кода, я получаю сообщение об ошибке, которое следует ниже:

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

Моя ошибка: Outer Исключение:

{"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"}

Настройка: Я установил npgsql из NugetPacka ge Manager Я установил Entitiy Framework 6 для npgsql из диспетчера пакетов Nuget

У меня есть следующий файл 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 раз медленнее, чем прямой SQL через sqlconnector и команды. Однако запуск его во второй раз, является немедленным (имеет только 7 строк в базе данных). Сделаем еще одно исследование.

+0

Как примечание боковой линии (если разрешено), проблема скорости в EF, по-видимому, связана с созданием dbContext. Протестировано с использованием двух отдельных запросов, только первое выполнение внутри одного и того же dbContext показало накладные расходы. Также было бы разумным использовать модулированные dbContexts (если у вас есть большое количество сущностей/таблиц). –

 Смежные вопросы

  • Нет связанных вопросов^_^