2012-07-04 3 views
7

나는 공식적인 지침과 함께 Entity Framework 및 PostgreSQL 사용에 관해 논의하는 스레드를 이미 보았습니다. 해당 지침은 배포 목적으로는별로 도움이되지 않는 모든 설치에 대해 gacutil을 실행해야합니다.연결에서 Entity Framework + PostgreSQL을 사용하는 방법?

내가 여기서하고 싶은 것은 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'의 연결에 대한 공급자 이름을 확인할 수 없습니다.

어떻게해야합니까?

+0

나를 위해 일하는 것 같습니다. – user007

답변

4

app/web.config에 Npgsql 공급자를 등록해야합니다. 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 어셈블리 버전과 정확히 일치하는지 확인하십시오 (또는 버전/문화권/PublicKeyToken을 생략하십시오). <Clear />은 이미 machine.config에 Npgsql에 대한 항목이있는 시스템에서 실행되는 경우 충돌을 피할 수 있습니다. 명확하지 않으면 예외가 발생합니다. 그러나 해당 응용 프로그램에 대해 machine.config에 지정된 다른 공급자에 의존하지 않는다고 가정합니다.

관련 문제