【问题标题】:Linq To Sql with PostgreSQL使用 PostgreSQL 的 Linq To Sql
【发布时间】:2011-01-31 19:26:33
【问题描述】:

是否可以将 LinqToSql 与 PostgreSQL 一起使用(最好与 Mono 一起使用)?你能推荐任何它一步一步描述的文章吗?

【问题讨论】:

    标签: .net linq linq-to-sql postgresql mono


    【解决方案1】:

    我在 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 的包装器)。

    【讨论】:

      【解决方案2】:

      不是开箱即用的。您必须找到为 PostgreSQL 编写提供程序的第三方。

      DbLinq 就是一个这样的提供者。可以在here找到安装和使用说明。

      请注意,自 2016 年起,DbLinq 项目已移至 github,已存档且不再维护。

      【讨论】:

        【解决方案3】:

        postgres(以及 MySql 和其他数据库)有第三方 Linq 提供程序here

        另一个选项是 ngpsql
        UPDATE npgsql 库已移至 Github 这里是 updated link

        【讨论】:

          【解决方案4】:

          使用 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 名开发人员的公司。

          【讨论】:

            【解决方案5】:

            Linq-to-SQL 仅支持 SQL Server。 Entity Framework 也支持其他数据库。

            【讨论】:

            【解决方案6】:

            不,LINQ to SQL 仅适用于 MS SQL Server。您必须使用 3-rd 方提供商来访问 PostgreSQL 数据源。我建议你试试Devart LinqConnect。该产品还提供了实体框架的一些特性,例如-复杂类型、差异继承类型支持等。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-27
              • 2015-10-31
              • 2010-11-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多