Domanda

Sono nuovo nel mondo Linq e attualmente lo sto esplorando. Sto pensando di usarlo nel mio prossimo progetto che prevede l'interazione con il database.

Da qualunque cosa io abbia letto, penso che ci siano 2 modi diversi per interagire con i database:

  • Linq to SQL
  • Linq to DataSet

Ora il prodotto su cui devo lavorare non può fare affidamento sul tipo di database. Ad esempio, potrebbe essere distribuito con SQL server / Oracle.

Ora le mie domande sono:

  1. Se uso Linq to SQL, sono bloccato solo con il server SQL?
  2. Penso di poter usare Linq per DataSet sia per SQL Server che per Oracle. Ma perderò qualcosa (facilità di programmazione, prestazioni, affidabilità ecc.) Se uso Linq a DataSet per server SQL (rispetto a Linq a SQL offcourse).
È stato utile?

Soluzione

Hai ragione su # 1 - Linq to Sql funzionerà solo con database SQL Server.

Andrei con ADO Entity Framework se desideri la possibilità di accedere a origini dati diverse (utilizzando provider diversi). Ottieni una flessibilità simile in termini di utilizzo di entità simili a POCO ed è abbastanza facile estenderlo per implementazioni più avanzate / complesse.

Nel mio progetto attuale, stiamo usando Linq to Sql ed è andato tutto bene, ma abbiamo avuto una serie di problemi da superare. L'ho trovato un po 'troppo semplicistico a volte in termini di estensibilità. Ho scritto una (migliore) risposta riguardo Linq a SQL e Entity Framework qui .

Rispetto alla domanda n. 2 - Non sono sicuro che mi piacerebbe tornare ai set di dati. IMHO sono più un ricordo del passato, ma possono essere utili se hai un kit di strumenti decente con controlli specifici (come Infragistics). Tuttavia, trovo il loro sovraccarico troppo costoso per i sistemi transazionali veloci. L'implementazione non ha la metà delle funzionalità di Linq to Sql o Entity Framework.

Altri suggerimenti

Per rispondere alla tua prima domanda: no, ci sono altre implementazioni di provider linq per Oracle, ad esempio:

LinqToOracle

DbLinq

Quest'ultimo supporta più database, come SqLite.

Controlla anche il ADO.NET Entity Framework .

  1. Sì, è solo SQL Server. Inoltre, Microsoft ha bloccato L2S e non lo perfezionerà ulteriormente. Ma è un buon framework, funziona davvero bene ed è facile da usare.
  2. Linq to DataSet accede ai set di dati come enumerabili dopo che i dati sono stati recuperati dal DB. Linq to SQL utilizza IQueriable per creare effettivamente query SQL dinamiche. In molti casi, L2S funzionerà molto meglio e ti salverà dalla scrittura del codice DB.

Dovresti esaminare Linq to Entities. Questo è il framework più completo disponibile. In questo momento, è principalmente per SQL Server, ma avrai il supporto per Oracle ecc. In tempo.

  1. Non sei bloccato solo con il server SQL. In teoria è possibile creare un provider linq per qualsiasi database. Esiste un progetto su codeplex per Linq to Oracle http://www.codeplex.com/LinqToOracle . Non l'ho provato da solo.

  2. Come otterrete i dati nel set di dati? Suppongo che non recupererai un intero tavolo in un set di dati? Sarebbe un grave problema di prestazioni. Se hai intenzione di utilizzare Linq per il set di dati, dovrai scrivere tu stesso tutte le query SQL per ottenere i dati dal database, invece di lasciare che linq crei le query sql. Quindi dovrai prima interrogare il database e poi il set di dati. Mi sembra un doppio lavoro ...

Quando usi Linq to SQL, rimarrai praticamente bloccato con SQL Server, per quanto ne so.

Se usi Linq per DataSet, perderai un po 'di facilità di programmazione: con Linq, puoi usare le entità Linq direttamente mentre con DataSet, devi continuare a usare il nome DataSet (MyDataSet.Entity = new MyDataSet .Entity ()), che invecchia dopo un po '. Penso che sia l'unico sacrificio.

Tuttavia, puoi usarlo con ad es. Oracle (lo ha fatto su un progetto). È anche praticamente drag-and-drop con un po 'più di controllo su DataAdapter (per quanto ne so - non ho mai dovuto modificare Linq-to-SQL così tanto), è possibile specificare (ad esempio) quali query utilizzare , ecc.

Dato che puoi ancora definire le relazioni tra le tabelle nei DataSet, puoi comunque usare Linq abbastanza bene, quindi non vedrai davvero problemi lì.

Suppongo che l'affidabilità sia buona con Linq-to-DataSet come con Linq-to-SQL (non ha mai avuto problemi), le prestazioni sembrano essere abbastanza buone, tuttavia non potrei mai profilarle davvero.

Non sei bloccato solo su SQL Server. Offriamo implementazioni LINQ to SQL per server Oracle, MySQL, PostgreSQL e SQLite. Ulteriori informazioni qui I set di dati non sono così convenienti rispetto alla tecnologia LINQ to SQL. Controlla l'opzione Entity Framework come alternativa. È possibile scrivere diversi modelli di archiviazione con un modello concettuale e quindi utilizzare SQL Server e il database Oracle in parallelo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top