使用PostgreSQL的Linq To Sql

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的包装器).


Ran*_*der 12

没有开箱即用.您必须找到为PostgreSQL编写提供程序的第三方.

其中一个提供商是DbLinq.可在此处找到安装和使用说明.


Ode*_*ded 9

有一个第三方LINQ提供Postgres的(以及MySQL和其他数据库)在这里.

另一种选择是ngpsql


Pie*_*rre 5

对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个开发人员组成的公司来说效果很好。