Che*_*kov 27 .net linq postgresql mono linq-to-sql
是否可以将LinqToSql与PostgreSQL一起使用(最好使用Mono)?你能推荐一步一步描述的文章吗?
Ced*_*edX 15
我使用LINQ to SQL大约2年的MySQL和PostgreSQL数据库(在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,Culture = neutral,PublicKeyToken = 5d8b90d52f46fda7"
注意:在Mono上,DbMetal工具被"sqlmetal"命令取代,该命令具有相同的参数(它只是DbMetal的包装器).
对PostgreSQL使用LinqToDB
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();
#>
Run Code Online (Sandbox Code Playgroud)
每次保存*.tt文件时,将重新生成该类。对于我们这个由21个开发人员组成的公司来说效果很好。
| 归档时间: |
|
| 查看次数: |
19711 次 |
| 最近记录: |