2011-01-31 79 views

回答

10

不開箱即用。您必須找到爲PostgreSQL編寫了一個提供程序的第三方。

一個這樣的提供者是DbLinq。安裝和使用說明可參見here

8

有一個第三方Linq提供程序postgres(以及MySql和其他數據庫)here

另一種選擇是ngpsql

4

Linq-to-SQL僅支持SQL服務器。 Entity Framework也支持其他數據庫。

+3

http://www.mono-project.com/Compatibility實體框架在Mono上不受支持。 – skolima 2011-02-01 11:59:39

2

不,LINQ to SQL只適用於MS SQL Server。你必須使用第三方提供者來訪問PostgreSQL數據源。我建議你試試Devart LinqConnect。此外,本產品還提供了Entity Framework的一些功能,例如 - 複雜類型,差異繼承類型支持等。

15

我使用LINQ to SQL,因爲MySQL和PostgreSQL數據庫使用了大約2年的時間(在Windows上使用DbLinq,使用Mono Linux和Mac OS X)。

因此,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

個人而言,具有單聲道2.10.6,我使用這種類型的連接字符串:「服務器=本地主機;數據庫= MYDB;用戶ID = Postgres的;密碼= MyPassword輸入; DbLinqProvider = PostgreSQL的; DbLinqConnectionType = Npgsql.NpgsqlConnection,Npgsql的,版本= 4.0.0.0,文化=中性公鑰= 5d8b90d52f46fda7"

注:單聲道,在DbMetal工具被替換爲「sqlmetal」命令,它具有相同的參數(它只是DbMet的包裝人)。

2

使用LinqToDB 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位開發人員。