È possibile utilizzare LinqToSql con PostgreSQL (preferibilmente con Mono)? Potete consigliare articoli in cui è descritto passo dopo passo?Linq To Sql con PostgreSQL
risposta
Linq-to-SQL
supporta solo SQL Server. Entity Framework supporta anche altri database.
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.
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).
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.
- 1. NOLOCK con Linq to SQL
- 2. LINQ to SQL con SQL Azure
- 3. LINQ to SQL -
- 4. Timeout Linq-to-SQL
- 5. Concorrenza con Linq To Sql e ASP.NET
- 6. Servizi dati ADO.NET con Linq-to-SQL
- 7. Insert/Select con LINQ to SQL
- 8. Aggiornamento cumulativo con LINQ to SQL
- 9. serializzazione automatica con LINQ to SQL
- 10. Restituisce un conteggio con linq-to-sql
- 11. inserimento di massa con LINQ to SQL
- 12. Uso Compilato LINQ to SQL con ExecuteMethodCall
- 13. LINQ to SQL batch cancellare
- 14. Linq-to-SQL e sp_reset_connection
- 15. LINQ to SQL e immutabilità
- 16. LINQ to SQL decimale Parametro
- 17. LINQ to SQL - aggiornamento record
- 18. LINQ to SQL: risoluzione Concurrency
- 19. Linq to SQL e Avere
- 20. LINQ to SQL ForeignKeyReferenceAlreadyHasValueException error
- 21. Che cos'è "Linq to SQL"?
- 22. Traduci istruzione LINQ to sql
- 23. ObjectTrackingEnabled e linq-to-sql
- 24. LINQ to SQL per Oracle.ODP
- 25. Convert SQL per LINQ to SQL
- 26. Mimando SQL Insert Trigger con LINQ-to-SQL
- 27. come con LINQ to Entities
- 28. Non come in LINQ to SQL
- 29. Linq To Sql Operatore 'Where Or'
- 30. Elenco e Linq To Sql Performance Numero
http://www.mono-project.com/Compatibility Entity Framework non è supportato su Mono. – skolima
EntityFramework - Disponibile da mono 2.11.3. – UserControl