2011-01-31 28 views
23

È possibile utilizzare LinqToSql con PostgreSQL (preferibilmente con Mono)? Potete consigliare articoli in cui è descritto passo dopo passo?Linq To Sql con PostgreSQL

risposta

10

Non pronto. Dovresti trovare una terza parte che ha scritto un provider per PostgreSQL.

Uno di questi provider è DbLinq. Le istruzioni per l'installazione e l'uso possono essere trovate here.

8

C'è un provider Linq di terze parti per postgres (oltre a MySql e altri database) here.

Un'altra opzione è ngpsql

4

Linq-to-SQL supporta solo SQL Server. Entity Framework supporta anche altri database.

+3

http://www.mono-project.com/Compatibility Entity Framework non è supportato su Mono. – skolima

+5

EntityFramework - Disponibile da mono 2.11.3. – UserControl

2

No, LINQ to SQL funziona solo con MS SQL Server. Devi utilizzare il provider di terze parti per accedere all'origine dati PostgreSQL. Ti consiglio di provare Devart LinqConnect. Anche questo prodotto fornisce alcune funzionalità di Entity Framework, ad esempio: tipo complesso, supporto per tipo di ereditarietà differenza, ecc.

15

Uso LINQ to SQL da circa 2 anni con database MySQL e PostgreSQL (utilizzando DbLinq su Windows, utilizzando Mono su Linux e Mac OS X).

Quindi LINQ to SQL NON è limitato a SQL Server, ma come indicato sopra, è necessario utilizzare librerie esterne.

Su Mono, DbLinq è la base dello spazio dei nomi System.Data.Linq: non è necessario distribuire/registrare gli assembly DbLinq. Idem per l'assembly Npgsql: è già fornito dalle ultime versioni di Mono.

È necessario tenere presente che il supporto è incompleto (ho avuto numerosi problemi quando ho tentato di associare un controllo ObjectDataSource a un contesto di dati PostgreSQL: li ho risolti eseguendo l'associazione manuale dei dati con le entità generate). Ma questo è sufficiente per la maggior parte delle query SQL (non ho quasi mai avuto query non riuscite: le articolazioni complesse possono essere simulate da diverse query più semplici).

C'è poca differenza tra DbLinq e LINQ in SQL. Solo la stringa di connessione deve essere personalizzata fornendo informazioni sul fornitore di dati. Vedere questi brevi esempi (non ho mai trovato una vera esercitazione circa l'uso di DbLinq):

http://www.mono-project.com/Release_Notes_Mono_2.6
http://www.jprl.com/Blog/archive/development/mono/2009/Mar-12.html

Personalmente, con Mono 2.10.6, io uso questo tipo di stringa di connessione: "Server = localhost ; Database = MyDB; User Id = Postgres; password = Miapassword; DbLinqProvider = PostgreSql; DbLinqConnectionType = Npgsql.NpgsqlConnection, Npgsql, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 5d8b90d52f46fda7"

Nota: su Mono, il Lo strumento DbMetal è sostituito dal comando "sqlmetal", che ha gli stessi parametri (è solo un wrapper attorno a DbMet al).

2

Usa LinqToDB per PostgreSQL

https://www.nuget.org/packages/linq2db.PostgreSQL/

In Visual Studio, console NuGet aprire ed eseguire il seguente:

PM> Install-Package linq2db.PostgreSQL

vi ritroverete con una cartella nella soluzione: LinqToDB.PostgreSQL . All'interno della cartella c'è un file chiamato CopyMe.PostgreSQL.tt.txt. Leggi nel file cosa fare per ottenere la classe Context generata.

Esempio di questo file contenuti:

<#@ 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(); 
#> 

Ogni volta che si salva il file *.tt, la classe sarà rigenerato. Funziona bene per la nostra azienda di 21 sviluppatori.