LINQ e ADO.NET

Oggi molti sviluppatori aziendali devono usare due linguaggi di programmazione (o più) : un linguaggio di alto livello per la logica di business e i livelli di presentazione (ad esempio Visual C# o Visual Basic) e un linguaggio di query per interagire con il database (ad esempio Transact-SQL). Tale necessità non solo richiede una conoscenza approfondita di diversi linguaggi da parte degli sviluppatori, ma provoca anche problemi di mancata corrispondenza tra linguaggi nell'ambiente di sviluppo. Ad esempio, in un'applicazione che usa un'API di accesso ai dati per eseguire una query su un database la query viene specificata come valore letterale stringa racchiuso tra virgolette. Questa stringa di query non è leggibile per il compilatore e non viene verificata la presenza di errori, ad esempio sintassi non valida o se le colonne o le righe a cui fa riferimento in realtà. Non viene eseguito il controllo dei tipi dei parametri della query, né è disponibile il supporto per IntelliSense.

Language-Integrated Query (LINQ) consente agli sviluppatori di creare query basate su set nel codice dell'applicazione, senza dover usare un linguaggio di query separato. È possibile scrivere query LINQ su varie origini dati enumerabili, ovvero un'origine dati che implementa l'interfacciaIEnumerable, ad esempio strutture di dati in memoria, documenti XML, database SQL e DataSet oggetti. Sebbene queste origini dati enumerabili vengono implementate in modi diversi, espongono tutte la stessa sintassi e gli stessi costrutti di linguaggio. Poiché è possibile formare query nel linguaggio di programmazione stesso, non è necessario usare un altro linguaggio di query incorporato sotto forma di valori letterali stringa che il compilatore non è in grado di riconoscere o verificare. L'integrazione delle query nel linguaggio di programmazione consente anche ai programmatori di Visual Studio di essere più produttivi fornendo il controllo del tipo e della sintassi in fase di compilazione e IntelliSense. Queste funzionalità riducono l'esigenza di debug e correzione degli errori delle query.

Il trasferimento di dati da tabelle SQL in oggetti in memoria è un'operazione spesso laboriosa e soggetta a errori. Il provider LINQ implementato da LINQ to DataSet e LINQ to SQL converte i dati di origine in IEnumerableraccolte di oggetti basati su . Il programmatore visualizza sempre i dati sotto forma di una raccolta IEnumerable, sia quando si esegue una query che quando si effettua un aggiornamento. Per la scrittura di query da eseguire su tali raccolte, viene fornito il supporto per IntelliSense.

Sono disponibili tre tecnologie di query ADO.NET Language-Integrated separate: LINQ to DataSet, LINQ to SQL e LINQ to Entities. LINQ to DataSet offre query più avanzate e ottimizzate su DataSet e LINQ to SQL consente di eseguire query direttamente sugli schemi del database SQL Server e LINQ to Entities consente di eseguire query su un modello di dati di entità.

Nel diagramma seguente viene fornita una panoramica della correlazione tra le tecnologie LINQ ADO.NET, i linguaggi di programmazione di alto livello e le origini dati con supporto LINQ.

LINQ to ADO.NET overview

Per altre informazioni su LINQ, vedere Language Integrated Query (LINQ).

Le sezioni seguenti forniscono altre informazioni su LINQ to DataSet, LINQ to SQL e LINQ to Entities.

LINQ to DataSet

È DataSet un elemento chiave del modello di programmazione disconnesso basato su ADO.NET ed è ampiamente usato. LINQ to DataSet consente agli sviluppatori di creare funzionalità DataSet di query più avanzate usando lo stesso meccanismo di formulazione di query disponibile per molte altre origini dati. Per altre informazioni, vedere LINQ to DataSet.

LINQ to SQL

LINQ to SQL è uno strumento utile per gli sviluppatori che non richiedono il mapping a un modello concettuale. Usando LINQ to SQL, è possibile usare il modello di programmazione LINQ direttamente sullo schema di database esistente. LINQ to SQL consente agli sviluppatori di generare classi .NET Framework che rappresentano i dati. Anziché eseguire il mapping a un modello di dati concettuale, tali classi generate vengono mappate direttamente a tabelle di database, visualizzazioni, stored procedure e funzioni definite dall'utente.

Con LINQ to SQL, gli sviluppatori possono scrivere codice direttamente nello schema di archiviazione usando lo stesso modello di programmazione LINQ delle raccolte in memoria e , DataSetoltre ad altre origini dati, ad esempio XML. Per altre informazioni, vedere LINQ to SQL.

LINQ to Entities

La maggior parte delle applicazioni viene attualmente scritta basandosi su database relazionali. A un certo punto è necessario che queste applicazioni interagiscano con i dati rappresentati in forma relazionale. Gli schemi di database non costituiscono sempre la soluzione ideale per la compilazione di applicazioni e i modelli concettuali di applicazione non corrispondono ai modelli logici di database. Entity Data Model è un modello di dati concettuale che può essere usato per modellare i dati di un determinato dominio in modo che le applicazioni possano interagire con i dati come oggetti. Per altre informazioni, vedere ADO.NET Entity Framework.

Tramite Entity Data Model, i dati relazionali vengono esposti come oggetti nell'ambiente .NET. Ciò rende il livello dell'oggetto una destinazione ideale per il supporto linQ, consentendo agli sviluppatori di formulare query sul database dal linguaggio usato per compilare la logica di business. Questa funzionalità è nota come LINQ to Entities. Per altre informazioni, vedere LINQ to Entities.

Vedi anche