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
Linq-to-SQL
chỉ hỗ trợ SQL Server. Entity Framework cũng hỗ trợ các cơ sở dữ liệu khác.
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.
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).
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.
- 1. LINQ to SQL với SQL Azure
- 2. NOLOCK với LINQ to SQL
- 3. PostgreSQL tương đương với SQL Server GROUP BY VỚI ROLLUP
- 4. GIS: PostGIS/PostgreSQL so với MySql so với SQL Server?
- 5. Tương lai của LINQ với SQL
- 6. LINQ/Lambda tương đương với SQL trong
- 7. Insert/Chọn với LINQ-To-SQL
- 8. PostgreSQL hoặc MS SQL Server?
- 9. LINQ to SQL hoặc LINQ to DataSet?
- 10. SQL LIKE trong LINQ
- 11. MS SQL Server tương đương với giải thích của PostgreSQL
- 12. Có một PostgreSQL tương đương với SQL Server profiler không?
- 13. Tương đương PostgreSQL với SQL Server NVARCHAR là gì?
- 14. LINQ 2 SQL hoặc LINQ Entities
- 15. Chuyển đổi SQL để LINQ to SQL
- 16. SQL to LINQ Tool
- 17. T-SQL IsNumeric() và LINQ-to-SQL
- 18. DB2 vs PostgreSQL vs SQL Server
- 19. LINQ to SQL Decimal Parameter
- 20. LINQ to SQL tạo bảng
- 21. LINQ to batch sql xóa
- 22. Rails/PostgreSQL SQL khác biệt w/Ngày
- 23. LINQ to SQL và có
- 24. Dịch vụ dữ liệu ADO.NET với LINQ-to-SQL
- 25. Trả lại một số đếm với linq-to-sql
- 26. Cập nhật hàng loạt với LINQ to SQL
- 27. Sử dụng Biên soạn LINQ to SQL với ExecuteMethodCall
- 28. LINQ to SQL mong muốn tải với điều kiện
- 29. Chuyển đổi SQL để LINQ trái tham gia với null
- 30. Tương đương LINQ với toán tử SQL IN là gì
http://www.mono-project.com/Compatibility Khung thực thể không được hỗ trợ trên Mono. – skolima
EntityFramework - Có sẵn từ Mono 2.11.3. – UserControl