2013-11-25 28 views
6

Próbuję utworzyć małe POC dla mojego szefa o hybrydzie npgsql 12 i ef6, stworzyłem nowy projekt w studiu graficznym utworzyłem próbną bazę danych utworzyłem odpowiednie klasy i dbcontext jeszcze, kiedy próbuję ef i używać w celu uzyskania dostępu do bazy danych otrzymuję błąd folowing:Użycie razem z npgsql 12 i ef 6 - czy komuś się udało?

The 'Instance' member of the Entity Framework provider type 'Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' did not return an object that inherits from 'System.Data.Entity.Core.Common.DbProviderServices'. Entity Framework providers must inherit from this class and the 'Instance' member must return the singleton instance of the provider. This may be because the provider does not support Entity Framework 6 or later; see http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

wiem, że powinno być wspierane przez jakiś czas teraz http://fxjr.blogspot.co.il/2013/06/initial-ef-6-support-added-to-npgsql.html

jednak nie wydaje się uzyskać go do pracy, my App.C Plik onfig wygląda następująco:

<?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" /> 
    <!--<section name="entityFramework" type="Npgsql.NpgsqlFactory, Npgsql,  Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />--> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <entityFramework> 
    <defaultConnectionFactory type="Npgsql.NpgsqlFactory, Npgsql"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient"  type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="Npgsql" type="Npgsql.NpgsqlFactory, Npgsql" /> 
    </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="CoolestPGSoft" 
      connectionString="Server=127.0.0.1;Port=5432;Database=CoolestPGSoft;User Id=postgres;Password=********;" 
      providerName="Npgsql" /> 
    </connectionStrings> 
</configuration> 

każda pomoc będzie doceniona!

Odpowiedz

3

Teraz działa tylko z wersją ostatnia beta Npgsql http://pgfoundry.org/frs/download.php/3494/Npgsql2.0.13.91-bin-ms.net4.5Ef6.zip I trzeba zmienić

<provider invariantName="Npgsql" type="Npgsql.NpgsqlFactory, Npgsql" /> 

do

<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql" /> 
+0

Zajęło mi to trochę czasu, aby samemu dojść do tego - musiałem przejść do konsoli menedżera paczek i użyć "Instaluj-Pakiet npgsql -Pre", także d na podstawie encji, dzięki za potwierdzenie, powinienem był zrobić to tylko dla npgsql. –

+2

Używanie That NpgSql Z pliku ZIP tutaj (2.0.13.91) Rzeczywiście nie rzuca wyjątku DbProvider, ale rzuca kilka innych dziwnych wyjątków dotyczących zapytań. EF6 i NpgSql 2.0.14.3 są teraz dostępne w nuget bez użycia -pre. Ale nadal wracam do tego samego wyjątku, o którym mowa powyżej. Wersje stabilne EF i NpgSql są wydawane, musi to być rozwiązanie! –

3

mam go EF6 i Npgsql do pracy następuje:

Entity Framework 6 with Npgsql

PMC> Install-Package EntityFramework 
(should give you version 6) 

PMC> Install-Package Npgsql.EF6 -Pre 
(should give you 2.0.12-pre4) 

A ci iść do app.config

<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="PostgreSQL" 
     providerName="Npgsql" 
     connectionString="Server=asdf;Port=5432;User Id=asdf;Password=asdf;Database=asdf;enlist=true" /> 
    </connectionStrings> 

    <entityFramework> 
    <providers> 
     <provider invariantName="Npgsql" 
       type="Npgsql.NpgsqlServices, Npgsql" /> 
    </providers> 
    </entityFramework> 
1

Jest to szablon App.config, które można wykorzystać jako punkt wyjścia.

<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> 
     <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
     </startup> 
     <entityFramework> 
     <providers> 
      <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework"></provider> 
     </providers> 
     <defaultConnectionFactory type="Npgsql.NpgsqlFactory, Npgsql" /> 
     </entityFramework> 
     <system.data> 
     <DbProviderFactories> 
      <remove invariant="Npgsql" /> 
      <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" /> 
     </DbProviderFactories> 
     </system.data> 
    </configuration> 

Należy pamiętać, że trzeba będzie zespół Npgsq.EntityFramework.dll 2.1.0 oraz 2.1.0 Npgsql Obie są obecnie w wersji beta i można je znaleźć w Nuget lub http://downloads.npgsql.org lub w naszym stronie projektu GitHub: https://github.com/npgsql/Npgsql/releases.

Właśnie napisał na blogu o tym: http://fxjr.blogspot.com.br/2014/02/using-entity-framework-6-with-npgsql-210.html

Mam nadzieję, że to pomaga.

1

To jak mam to działa:

Najpierw zainstaluj pakiet

Install-Package Npgsql.EF6 -Pre

A potem dodać tę linię do pliku web.config

<system.data> 
    <DbProviderFactories> 
    <remove invariant="Npgsql" /> 
    <add name="Npgsql Data Provider" invariant="Npgsql" support="FF"   description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" /> 
    </DbProviderFactories> 
</system.data>