2009-03-06 25 views
9

Sono nuovo nel mondo Linq e attualmente lo sto esplorando. Sto pensando di usarlo nel mio prossimo progetto che implica l'interazione con il database.Da Linq a SQL o Linq a DataSet?

Da tutto quello che ho letto, penso che ci sono 2 modi diversi di interagire con i database:

  • LINQ to SQL
  • LINQ to DataSet

Ora il prodotto che io sono a lavorare su, 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, io sono bloccati con unico server SQL?
  2. Penso di poter utilizzare Linq a DataSet sia per SQL server che per Oracle. Ma perderò qualcosa (facilità di programmazione, prestazioni, affidabilità ecc.) Se utilizzo Linq su DataSet per server SQL (rispetto a Linq per SQL offcourse).
+0

e una terza opzione: ADO Entity Framework (in aggiunta a Linq alle entità) – RobS

risposta

11

Sei corretto su # 1 - Linq to Sql funzionerà solo contro i database di SQL Server.

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

Sul mio progetto corrente, stiamo utilizzando Linq per Sql ed è stato corretto, 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 riguardante Linq a Sql e Entity Framework here.

Rispetto alla domanda n. 2 - Non sono sicuro di voler tornare ai DataSet. IMHO sono più una cosa del passato, ma possono essere utili se si dispone di un kit di strumenti decente con controlli specifici (come Infragistics). Tuttavia, trovo il loro overhead troppo costoso per i sistemi transazionali veloci. L'implementazione non ha la metà delle funzionalità di Linq per Sql o Entity Framework.

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

Si dovrebbe esaminare Linq alle entità. Questa è la struttura più completa disponibile. Al momento, è principalmente per SQL Server, ma in futuro avremo il supporto per Oracle ecc.

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

  2. Come verranno visualizzati i dati nell'insieme di dati?Non suppongo che stai andando a recuperare un intero tavolo in un set di dati? Sarebbe un serio problema di prestazioni. Se si intende utilizzare Linq sul set di dati, è necessario scrivere tutte le query SQL per ottenere i dati dal database, invece di consentire a linq di creare query SQL. Quindi in effetti dovrai prima interrogare il database e poi eseguire una query sul set di dati. Sembra doppio lavoro per me ...

1

Quando si utilizza Linq per SQL, si sarebbe praticamente bloccato con SQL Server, per quanto ne so.

Se si utilizza Linq su DataSet, si perde un po 'di facilità di programmazione: Con Linq, è possibile utilizzare direttamente le entità Linq mentre con DataSet, è necessario continuare a utilizzare il nome DataSet (MyDataSet.Entity = new MyDataSet.Entity()), che diventa vecchio dopo un po '. Penso che questo sia l'unico sacrificio.

Tuttavia, è possibile utilizzarlo ad es. Oracle (l'ho fatto su un progetto). È anche un drag-and-drop con un po 'più di controllo sul DataAdapter (per quanto ne so - non ho mai dovuto modificare molto da Linq-to-SQL), puoi specificare (es.) Quali query usare , ecc.

Poiché è ancora possibile definire le relazioni tra tabelle in DataSet, è comunque possibile utilizzare Linq abbastanza bene, in modo da non vedere i problemi.

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, ma non sono mai state in grado di definirlo.

4

Per rispondere alla tua prima domanda: no, non ci sono altre implementazioni dei fornitori di LINQ per Oracle, per esempio:

LinqToOracle

DbLinq

Questi ultimi sostengono più database, come SQLite.

Controllare anche il ADO.NET Entity Framework.

1

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