【发布时间】:2011-01-31 19:26:33
【问题描述】:
是否可以将 LinqToSql 与 PostgreSQL 一起使用(最好与 Mono 一起使用)?你能推荐任何它一步一步描述的文章吗?
【问题讨论】:
标签: .net linq linq-to-sql postgresql mono
是否可以将 LinqToSql 与 PostgreSQL 一起使用(最好与 Mono 一起使用)?你能推荐任何它一步一步描述的文章吗?
【问题讨论】:
标签: .net linq linq-to-sql postgresql mono
我在 MySQL 和 PostgreSQL 数据库上使用 LINQ to SQL 大约 2 年(在 Windows 上使用 DbLinq,在 Linux 和 Mac OS X 上使用 Mono)。
所以 LINQ to SQL 不限于 SQL Server,但如上所述,您需要使用外部库。
在 Mono 上,DbLinq 是 System.Data.Linq 命名空间的基础:您不需要部署/注册 DbLinq 程序集。 Npgsql 程序集的同义词:它已由最新版本的 Mono 提供。
您应该知道支持是不完整的(当我尝试将 ObjectDataSource 控件绑定到 PostgreSQL 数据上下文时遇到了很多问题:我通过对生成的实体进行手动数据绑定来解决这些问题)。但这对于大多数 SQL 查询来说已经足够了(我几乎从未遇到任何失败的查询:复杂的关节可以通过几个更简单的查询来模拟)。
DbLinq 和 LINQ to SQL 之间几乎没有区别。只有连接字符串必须通过提供有关数据提供者的信息来定制。查看这些简短的示例(我从未找到任何关于使用 DbLinq 的真正教程):
http://www.mono-project.com/Release_Notes_Mono_2.6
http://www.jprl.com/Blog/archive/development/mono/2009/Mar-12.html
就个人而言,对于 Mono 2.10.6,我使用这种类型的连接字符串:“Server=localhost; Database=MyDB; User Id=postgres; Password=MyPassword; DbLinqProvider=PostgreSql; DbLinqConnectionType=Npgsql.NpgsqlConnection, Npgsql, Version =4.0.0.0,文化=中性,PublicKeyToken=5d8b90d52f46fda7"
注意:在 Mono 上,DbMetal 工具被替换为“sqlmetal”命令,该命令具有相同的参数(它只是 DbMetal 的包装器)。
【讨论】:
postgres(以及 MySql 和其他数据库)有第三方 Linq 提供程序here。
另一个选项是 ngpsql
UPDATE npgsql 库已移至 Github 这里是 updated link
【讨论】:
使用 LinqToDB for PostgreSQL
https://www.nuget.org/packages/linq2db.PostgreSQL/
在 Visual Studio 中,打开 NuGet 控制台并运行以下命令:
PM> Install-Package linq2db.PostgreSQL
您的解决方案中最终会出现一个文件夹:LinqToDB.PostgreSQL。在文件夹中有一个名为CopyMe.PostgreSQL.tt.txt 的文件。阅读文件如何生成 Context 类。
此文件内容示例:
<#@ 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();
#>
每次保存*.tt 文件时,都会重新生成类。
非常适合我们拥有 21 名开发人员的公司。
【讨论】:
Linq-to-SQL 仅支持 SQL Server。 Entity Framework 也支持其他数据库。
【讨论】:
不,LINQ to SQL 仅适用于 MS SQL Server。您必须使用 3-rd 方提供商来访问 PostgreSQL 数据源。我建议你试试Devart LinqConnect。该产品还提供了实体框架的一些特性,例如-复杂类型、差异继承类型支持等。
【讨论】: