2011-01-31 20 views

Respuesta

10

No fuera de la caja. Tendría que encontrar un tercero que haya escrito un proveedor para PostgreSQL.

Uno de estos proveedores es DbLinq. Las instrucciones para la instalación y el uso se pueden encontrar en here.

8

Hay un tercer proveedor de LINQ fiesta para postgres (así como MySQL y otras bases de datos) here.

Otra opción es ngpsql

4

Linq-to-SQL sólo es compatible con SQL Server. Entity Framework también es compatible con otras bases de datos.

+3

http://www.mono-project.com/Compatibility Entity Framework no es compatible con Mono. – skolima

+5

EntityFramework - Disponible desde Mono 2.11.3. – UserControl

2

No, LINQ to SQL funciona solo con MS SQL Server. Debe utilizar el proveedor de la tercera parte para acceder al origen de datos de PostgreSQL. Te recomiendo que pruebes Devart LinqConnect. También este producto proporciona algunas características de Entity Framework, por ejemplo: tipo complejo, soporte de tipo diferencia de herencia, etc.

15

Uso LINQ to SQL desde hace 2 años con las bases de datos MySQL y PostgreSQL (usando DbLinq en Windows, usando Mono en Linux y Mac OS X).

Así LINQ a SQL no se limita a SQL Server, pero como se ha dicho, es necesario utilizar librerías externas.

en Mono, DbLinq es la base del espacio de nombres System.Data.Linq: no es necesario para desplegar/registrar los ensamblados DbLinq. Idem para el ensamblaje Npgsql: ya está provisto por las últimas versiones de Mono.

Debe tener en cuenta que la compatibilidad es incompleta (tuve numerosos problemas cuando intenté vincular un control ObjectDataSource con un contexto de datos PostgreSQL: los resolví haciendo un enlace de datos manual con las entidades generadas). Pero esto es suficiente para la mayoría de las consultas SQL (casi nunca he tenido consultas fallidas: las articulaciones complejas se pueden simular mediante varias consultas más simples).

hay poca diferencia entre DbLinq y LINQ a SQL. Solo la cadena de conexión debe personalizarse mediante el suministro de información sobre el proveedor de datos. Ver estas muestras cortas (que nunca se ha encontrado ningún tutorial real sobre el uso de DbLinq):

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

En lo personal, con Mono 2.10.6, utilizo este tipo de cadena de conexión: "Servidor = localhost ; Database = MyDB; User Id = postgres; contraseña = MiContraseña; DbLinqProvider = PostgreSql; DbLinqConnectionType = Npgsql.NpgsqlConnection, Npgsql, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 5d8b90d52f46fda7"

Nota: en Mono, el La herramienta DbMetal es reemplazada por el comando "sqlmetal", que tiene los mismos parámetros (es solo un envoltorio alrededor de DbMet) Alabama).

2

Uso LinqToDB para PostgreSQL

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

En Visual Studio, la consola NuGet abierta y ejecute el siguiente:

PM> Install-Package linq2db.PostgreSQL

que va a terminar con una carpeta en su solución: LinqToDB.PostgreSQL . Dentro de la carpeta hay un archivo llamado CopyMe.PostgreSQL.tt.txt. Lea en el archivo qué hacer para generar su clase de contexto.

ejemplo de esto el contenido del archivo:

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

Cada vez que guarde el archivo *.tt, se regenerará la clase. Funciona bien para nuestra empresa de 21 desarrolladores.