2011-01-31 30 views
23

Có thể sử dụng LinqToSql với PostgreSQL (tốt nhất là với Mono) không? Bạn có thể đề xuất bất kỳ bài viết nào được mô tả theo từng bước không?LINQ Sql với PostgreSQL

Trả lời

10

Không nằm ngoài hộp. Bạn sẽ phải tìm một bên thứ ba đã viết một nhà cung cấp cho PostgreSQL.

Một nhà cung cấp như vậy là DbLinq. Hướng dẫn cài đặt và sử dụng có thể được tìm thấy here.

8

Có nhà cung cấp Linq bên thứ ba cho bưu phí (cũng như MySql và các cơ sở dữ liệu khác) here.

lựa chọn khác là ngpsql

4

Linq-to-SQL chỉ hỗ trợ SQL Server. Entity Framework cũng hỗ trợ các cơ sở dữ liệu khác.

+3

http://www.mono-project.com/Compatibility Khung thực thể không được hỗ trợ trên Mono. – skolima

+5

EntityFramework - Có sẵn từ Mono 2.11.3. – UserControl

2

Không, LINQ to SQL chỉ hoạt động với MS SQL Server. Bạn phải sử dụng nhà cung cấp bên thứ 3 để truy cập nguồn dữ liệu PostgreSQL. Tôi khuyên bạn nên thử Devart LinqConnect. Ngoài ra, sản phẩm này cung cấp một số tính năng của Khuôn khổ thực thể, ví dụ - loại phức tạp, hỗ trợ kiểu thừa kế khác biệt, v.v.

15

Tôi sử dụng LINQ to SQL từ khoảng 2 năm với cơ sở dữ liệu MySQL và PostgreSQL (sử dụng DbLinq trên Windows) Linux và Mac OS X).

Vì vậy LINQ to SQL KHÔNG bị giới hạn trong SQL Server, nhưng như đã nêu ở trên, bạn cần sử dụng các thư viện bên ngoài.

Trên Mono, DbLinq là nền tảng của không gian tên System.Data.Linq: bạn không cần triển khai/đăng ký các hội đồng DbLinq. Idem cho hội đồng Npgsql: nó đã được cung cấp bởi các phiên bản mới nhất của Mono. Bạn cần lưu ý rằng sự hỗ trợ không đầy đủ (tôi đã gặp rất nhiều vấn đề khi cố gắng ràng buộc điều khiển ObjectDataSource với bối cảnh dữ liệu PostgreSQL: Tôi đã giải quyết chúng bằng cách thực hiện ràng buộc dữ liệu thủ công với các thực thể được tạo ra). Nhưng điều này là đủ cho hầu hết các truy vấn SQL (tôi gần như không bao giờ có bất kỳ truy vấn thất bại nào: các khớp phức tạp có thể được mô phỏng bởi một số truy vấn đơn giản hơn).

Có rất ít sự khác biệt giữa DbLinq và LINQ to SQL. Chỉ chuỗi kết nối phải được tùy chỉnh bằng cách cung cấp thông tin về nhà cung cấp dữ liệu. Xem những mẫu ngắn (tôi không bao giờ tìm thấy bất kỳ hướng dẫn thực về việc sử dụng DbLinq):

http://www.mono-project.com/Release_Notes_Mono_2.6
http://www.jprl.com/Blog/archive/development/mono/2009/Mar-12.html

Cá nhân, với Mono 2.10.6, tôi sử dụng loại chuỗi kết nối: "Server = localhost ; Database = MyDB; User ID = postgres; Password = mypassword; DbLinqProvider = PostgreSQL; DbLinqConnectionType = Npgsql.NpgsqlConnection, Npgsql, Version = 4.0.0.0, Culture = trung tính, PublicKeyToken = 5d8b90d52f46fda7"

Lưu ý: trên Mono, Công cụ DbMetal được thay thế bằng lệnh "sqlmetal", có cùng các tham số (nó chỉ là một trình bao bọc xung quanh DbMet al).

2

Sử dụng LinqToDB cho PostgreSQL

https://www.nuget.org/packages/linq2db.PostgreSQL/

Trong Visual studio, mở NuGet console và chạy như sau:

PM> Install-Package linq2db.PostgreSQL

Bạn sẽ kết thúc với một thư mục trong giải pháp của bạn: LinqToDB.PostgreSQL . Trong thư mục có tệp có tên là CopyMe.PostgreSQL.tt.txt. Đọc trong tập tin phải làm gì để tạo lớp Ngữ cảnh của bạn.

Ví dụ về nội dung tập tin này:

<#@ template language="C#" debug="True" hostSpecific="True"       #> 
<#@ output extension=".generated.cs"             #> 
<#@ include file="$(ProjectDir)LinqToDB.Templates\LinqToDB.PostgreSQL.Tools.ttinclude" #> 
<#@ include file="$(ProjectDir)LinqToDB.Templates\PluralizationService.ttinclude"  #> 
<# 
    /* 
     1. Copy this file to a folder where you would like to generate your data model, 
      rename it, and delete .txt extension. For example: 

      MyProject 
       DataModels 
        MyDatabase.tt 

     2. Modify the connection settings below to connect to your database. 

     3. Add connection string to the web/app.config file: 

      <connectionStrings> 
       <add name="MyDatabase" connectionString="Server=MyServer;Port=5432;Database=MyDatabase;User Id=postgres;Password=TestPassword;Pooling=true;MinPoolSize=10;MaxPoolSize=100;Protocol=3;" providerName="PostgreSQL" /> 
      </connectionStrings> 

     4. To access your database use the following code: 

      using (var db = new MyDatabaseDB()) 
      { 
       var q = 
        from c in db.Customers 
        select c; 

       foreach (var c in q) 
        Console.WriteLine(c.ContactName); 
      } 

     5. See more at https://github.com/linq2db/t4models/blob/master/Templates/ReadMe.LinqToDB.md. 
    */ 

    NamespaceName = "DataModels"; 

    LoadPostgreSQLMetadata("MyServer", "5432", "MyDatabase", "postgres", "TestPassword"); 
// LoadPostgreSQLMetadata(string connectionString); 

    GenerateModel(); 
#> 

Mỗi lần bạn lưu các tập tin *.tt, lớp sẽ được tái sinh. Hoạt động tốt cho công ty của chúng tôi gồm 21 nhà phát triển.