2013-11-25 13 views
6

Tôi đang cố gắng tạo một POC nhỏ cho sếp của mình về sự kết hợp của npgsql 12 và ef6, đã tạo một dự án mới trên studio trực quan tạo cơ sở dữ liệu mẫu tạo các lớp tương ứng và dbcontext , bất cứ khi nào tôi thử và sử dụng ef để truy cập cơ sở dữ liệu tôi nhận được lỗi folowing:Sử dụng npgsql 12 và ef 6 cùng nhau - có ai thành công với nó không?

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.

tôi biết rằng nó cần được hỗ trợ trong một thời gian khá bây giờ http://fxjr.blogspot.co.il/2013/06/initial-ef-6-support-added-to-npgsql.html

tuy nhiên tôi có thể dường như không nhận được nó để làm việc, App.C của tôi tệp onfig trông giống như sau:

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

bất kỳ trợ giúp nào sẽ được đánh giá cao!

Trả lời

3

Bây giờ nó chỉ làm việc với phiên bản beta cuối cùng của Npgsql http://pgfoundry.org/frs/download.php/3494/Npgsql2.0.13.91-bin-ms.net4.5Ef6.zip Và bạn phải thay đổi

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

để

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

Mất một thời gian để tự mình tìm hiểu - phải vào bảng điều khiển trình quản lý gói và sử dụng "Gói cài đặt npgsql -Pre", cũng di d rằng trên khuôn khổ thực thể, nhờ xác nhận tôi nên đã làm điều đó chỉ cho npgsql. –

+2

Sử dụng NpgSql đó từ tệp Zip ở đây (2.0.13.91) Thật vậy, không ném ngoại lệ DbProvider nhưng nó ném một số ngoại lệ lạ khác trên truy vấn. EF6 và NpgSql 2.0.14.3 Hiện có sẵn trên nuget mà không cần sử dụng -pre. Nhưng tôi vẫn rơi trở lại cùng một ngoại lệ được đề cập ở trên. Cả hai phiên bản ổn định của EF và NpgSql được phát hành ở đó phải có giải pháp! –

3

tôi đã nhận nó EF6 và Npgsql để làm việc sau:

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) 

Và những đi vào 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

Đây là một mẫu App.config mà bạn có thể sử dụng như là một điểm khởi đầu.

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

Lưu ý rằng bạn sẽ cần phải lắp ráp Npgsq.EntityFramework.dll 2.1.0 cũng như Npgsql 2.1.0 Cả hai hiện đang ở bản Beta và bạn có thể tìm thấy chúng ở NuGet hoặc http://downloads.npgsql.org hoặc trong trang dự án github của chúng tôi: https://github.com/npgsql/Npgsql/releases.

tôi chỉ viết một bài đăng blog về nó: http://fxjr.blogspot.com.br/2014/02/using-entity-framework-6-with-npgsql-210.html

Tôi hy vọng nó giúp.

1

Đây là cách tôi đã nhận nó làm việc:

Đầu tiên cài đặt gói

Install-Package Npgsql.EF6 -Pre

Và sau đó thêm dòng này vào 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> 
Các vấn đề liên quan