2012-07-04 48 views
7

Tôi đã xem các chủ đề thảo luận về việc sử dụng Entity Framework và PostgreSQL với các hướng dẫn chính thức. Những hướng dẫn đó cần chạy gacutil cho mọi lần cài đặt không tiện dụng cho mục đích triển khai.Làm thế nào để sử dụng Entity Framework + PostgreSQL từ kết nối?

Điều tôi muốn làm ở đây là chuyển kết nối PostgreSQL trực tiếp tới hàm tạo DbContext. Điều này là đủ cho tôi bởi vì tôi sẽ sử dụng CodeFirst mà không cần thiết kế. Đây là những gì tôi làm:

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); 
    } 
} 

Nhưng sử dụng phương pháp này tôi nhận được một NotSupportedException với thông điệp:

Không thể xác định tên nhà cung cấp để kết nối các loại 'Npgsql.NpgsqlConnection'.

Tôi nên làm gì?

+0

Dường như làm việc cho tôi – user007

Trả lời

4

Bạn cần phải đăng ký nhà cung cấp Npgsql trong app/web.config. Xem phần 3.4 Using Npgsql with ProviderFactory của hướng dẫn sử dụng Npgsql.

Khi bạn cài đặt nhà cung cấp ADO.NET cho cơ sở dữ liệu (MySQL, PostgreSQL, v.v.), trình cài đặt thường sẽ đăng ký hội đồng nhà cung cấp trong GAC và thêm mục nhập vào machine.config. Nếu bạn muốn triển khai mà không phải cài đặt nhà cung cấp, bạn cần phải bao gồm một bản sao của nhà cung cấp (thiết lập tham chiếu assembly Npgsql dưới dạng Bản sao cục bộ cho dự án của bạn) và thêm một mục vào app/web.config của ứng dụng của bạn như sau:

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

Đảm bảo phiên bản khớp chính xác với phiên bản của hội đồng Npgsql mà bạn triển khai (hoặc chỉ bỏ qua Phiên bản/Văn hóa/PublicKeyToken). Các <Clear /> là có để tránh xung đột nếu chạy trên một máy đã có mục nhập cho Npgsql trong machine.config của nó. Nếu không có rõ ràng bạn sẽ nhận được một ngoại lệ. Tuy nhiên, điều đó cũng giả định rằng bạn không dựa vào bất kỳ nhà cung cấp nào khác được chỉ định trong machine.config cho đơn đăng ký của bạn.

Các vấn đề liên quan