2016-04-01 3 views
3

В моем проекте я пытаюсь использовать Entity Framework вместе с PostgreSql. Но я не могу подключиться к моей базе данных. Я не получаю никакой ошибки, она просто застревает. Я думаю, что что-то не так с моим app.config, но я не могу выяснить, что.Postgresql и Entity Framework

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 
} 

EDIT:

Я получаю следующее сообщение об ошибке:
«Тип поставщика Entity Framework Npgsql.NpgsqlServices, Npgsql.EntityFramework», зарегистрированный в файле конфигурации приложения для поставщика ADO.NET с инвариантным именем «Npgsql», не может быть загружен. Убедитесь, что используется имя для сборки, и что сборка доступна для запущенного приложения.

+0

Ошибка довольно ясна. Запись типа поставщика неверна. * У вас есть сборка с именем Npgsql.EntityFramework.dll в вашем проекте? Какую версию пакета вы использовали? В [docs] (http://www.npgsql.org/doc/ef6/) имя сборки - 'Npgsql.EntityFrameworkLegacy.dll' –

+0

@PanagiotisKanavos I haveEntityFramework6.Npgsql версия 3.1.0.0 –

+0

@PanagiotisKanavos Вы абсолютно прав это была проблема, я этого не заметил. если вы поместите свой комментарий в качестве ответа, я могу его принять. это может помочь кому-то –

ответ

6

Проблема указывает на неправильный тип поставщика или имя сборки.

<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>