Procedura dettagliata: modello a oggetti e query semplici (Visual Basic) (LINQ to SQL)
In questa procedura dettagliata viene descritto uno scenario LINQ to SQL end-to-end di base con minime complessità.Verranno create una classe di entità per la modellazione della tabella Customers nel database Northwind di esempio,quindi una semplice query per elencare i clienti residenti nell'area londinese.
Questa procedura dettagliata è basata sul codice in fase di progettazione per illustrare i concetti di LINQ to SQL.Normalmente per creare il modello a oggetti si utilizza Object Relational Designer.Per ulteriori informazioni, vedere Progettazione relazionale oggetti e Progettazione relazionale oggetti e Progettazione relazionale oggetti.
Nota |
---|
Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio. |
Questa procedura dettagliata è stata scritta utilizzando Impostazioni di sviluppo di Visual Basic.
Prerequisiti
Per i file utilizzati nella procedura dettagliata viene utilizzata una cartella dedicata ("c:\linqtest").Creare la cartella prima di avviare la procedura.
Per questa procedura dettagliata è richiesto il database di esempio Northwind.Se questo database non è disponibile nel computer di sviluppo, è possibile scaricarlo dal sito di download Microsoft.Per istruzioni, vedere Download dei database di esempio (LINQ to SQL).Dopo avere scaricato il database, copiare il file nella cartella c:\linqtest.
Panoramica
La procedura dettagliata è costituita da sei attività principali:
Creazione di una soluzione LINQ to SQL in Visual Studio.
Mapping di una classe a una tabella del database.
Definizione di proprietà nella classe per rappresentare colonne del database.
Definizione della connessione al database Northwind.
Creazione di una semplice query da eseguire sul database.
Esecuzione della query e analisi dei risultati.
Creazione di una soluzione LINQ to SQL
In questa prima attività verrà creata una soluzione Visual Studio che contiene i riferimenti necessari per compilare ed eseguire un progetto LINQ to SQL.
Per creare una soluzione LINQ to SQL
Scegliere Nuovo progetto dal menu File.
Nella finestra di dialogo Nuovo progetto selezionare Visual Basic nel riquadro Tipi progetto.
Nel riquadro Modelli fare clic su Applicazione console.
Nella casella Nome digitare LinqConsoleApp.
Scegliere OK.
Aggiunta di riferimenti e direttive LINQ
In questa procedura dettagliata vengono utilizzati assembly che potrebbero non essere installati per impostazione predefinita nel progetto.Se System.Data.Linq non viene elencato come riferimento nel progetto facendo clic su Mostra tutti i file in Esplora soluzioni ed espandendo il nodo Riferimenti, aggiungerlo come spiegato nella procedura seguente.
Per aggiungere System.Data.Linq
In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti, quindi scegliere Aggiungi riferimento.
Nella finestra di dialogo Aggiungi riferimento fare clic su .NET, fare clic sull'assembly System.Data.Linq, quindi scegliere OK.
L'assembly verrà aggiunto al progetto.
Sempre nella finestra di dialogo Aggiungi riferimento, fare clic su .NET, individuare e fare clic su System.Windows.Forms, quindi scegliere OK.
Questo assembly, che supporta la finestra di messaggio nella procedura dettagliata, viene aggiunto al progetto.
Aggiungere la seguente direttiva sopra a Module1:
Imports System.Data.Linq Imports System.Data.Linq.Mapping Imports System.Windows.Forms
Mapping di una classe a una tabella del database
In questo passaggio verrà creata una classe ed eseguito il mapping della classe a una tabella di database.Tale classe è detta classe di entità.Notare che il mapping viene eseguito semplicemente aggiungendo l'attributo TableAttribute.La proprietà Name consente di specificare il nome della tabella nel database.
Per creare una classe di entità ed eseguire il mapping della classe a una tabella di database
Digitare o incollare il codice seguente in Module1.vb immediatamente sopra Sub Main:
<Table(Name:="Customers")> _ Public Class Customer End Class
Definizione di proprietà nella classe per rappresentare colonne del database
In questo passaggio si completeranno diverse attività.
Utilizzare l'attributo ColumnAttribute per definire le proprietà CustomerID e City nella classe di entità in modo che rappresentino colonne nella tabella del database.
Definire la proprietà CustomerID in modo che rappresenti una colonna di chiave primaria nel database.
Definire i campi _CustomerID e _City per l'archiviazione privata.LINQ to SQL sarà quindi in grado di archiviare e recuperare direttamente i valori, anziché utilizzare funzioni di accesso pubbliche che potrebbero includere la logica di business.
Per rappresentare caratteristiche di due colonne del database
Digitare o incollare il codice seguente in Module1.vb subito prima di End Class:
Private _CustomerID As String <Column(IsPrimaryKey:=True, Storage:="_CustomerID")> _ Public Property CustomerID() As String Get Return Me._CustomerID End Get Set(ByVal value As String) Me._CustomerID = value End Set End Property Private _City As String <Column(Storage:="_City")> _ Public Property City() As String Get Return Me._City End Get Set(ByVal value As String) Me._City = value End Set End Property
Definizione della connessione al database Northwind
In questo passaggio viene utilizzato un oggetto DataContext per stabilire una connessione tra le strutture di dati basate sul codice e il database stesso.DataContext è il canale principale tramite il quale vengono recuperati oggetti dal database e vengono inviate modifiche.
Viene inoltre dichiarato un oggetto Table(Of Customer) che fungerà da tabella tipizzata logica per le query sulla tabella Customers nel database.Tali query verranno quindi create ed eseguite nei passaggi successivi.
Per specificare la connessione al database
Digitare o incollare il codice seguente nel metodo Sub Main:
Si presuppone che il file northwnd.mdf si trovi nella cartella linqtest.Per ulteriori informazioni, vedere la sezione precedente relativa ai prerequisiti.
' Use a connection string. Dim db As New DataContext _ ("c:\linqtest\northwnd.mdf") ' Get a typed table to run queries. Dim Customers As Table(Of Customer) = _ db.GetTable(Of Customer)()
Creazione di una query semplice
In questo passaggio viene creata una query per cercare i clienti nella tabella di database Customers residenti nell'area londinese.Il codice della query in questo passaggio descrive semplicemente la query,ma non la esegue.Questo approccio è noto come esecuzione posticipata.Per ulteriori informazioni, vedere Introduzione alle query LINQ (C#).
Verrà inoltre prodotto un output del log per mostrare i comandi SQL generati da LINQ to SQL.Questa funzionalità di registrazione, che utilizza Log, è utile per eseguire il debug e per determinare che i comandi inviati al database rappresentano accuratamente la query.
Per creare una query semplice
Digitare o incollare il codice seguente nel metodo Sub Main dopo la dichiarazione Table(Of Customer):
' Attach the log to show generated SQL in a console window. db.Log = Console.Out ' Query for customers in London. Dim custQuery = _ From cust In Customers _ Where cust.City = "London" _ Select cust
Esecuzione della query
In questo passaggio verrà effettivamente eseguita la query.Le espressioni di query create nei passaggi precedenti non vengono valutate finché i risultati non saranno necessari.Quando si inizia l'iterazione For Each, viene eseguito un comando SQL sul database e gli oggetti vengono materializzati.
Per eseguire la query
Digitare o incollare il codice seguente alla fine del metodo Sub Main dopo la descrizione della query:
' Format the message box. Dim msg As String = "", title As String = "London customers:", _ response As MsgBoxResult, style As MsgBoxStyle = _ MsgBoxStyle.Information ' Execute the query. For Each custObj In custQuery msg &= String.Format(custObj.CustomerID & vbCrLf) Next ' Display the results. response = MsgBox(msg, style, title)
Premere F5 per eseguire il debug dell'applicazione.
Nota Se l'applicazione genera un errore di runtime, vedere la sezione relativa alla risoluzione dei problemi di Apprendimento tramite le procedure dettagliate (LINQ to SQL).
Nella finestra di messaggio viene visualizzato un elenco di sei clienti.Nella finestra della console verrà visualizzato il codice SQL generato.
Scegliere OK per chiudere la finestra del messaggio.
L'applicazione verrà chiusa.
Scegliere Salva tutto dal menu File.
Questa applicazione sarà necessaria se si continua con la successiva procedura dettagliata.
Passaggi successivi
L'argomento Procedura dettagliata: query tra relazioni (Visual Basic) (LINQ to SQL) continua dal punto in cui termina questa procedura dettagliata.In tale procedura dettagliata viene dimostrato come sia possibile eseguire una query tra tabelle in LINQ to SQL, in modo analogo ai join in un database relazionale.
Se si desidera eseguire la procedura dettagliata relativa all'esecuzione di query tra relazioni, è indispensabile salvare la soluzione per la procedura dettagliata appena completata.
Vedere anche
Concetti
Apprendimento tramite le procedure dettagliate (LINQ to SQL)