Procedura dettagliata: Modello a oggetti e query semplici (Visual Basic)

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. In genere, si usa Object Relational Designer per creare il modello di oggetti.

Nota

I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.

Questa procedura dettagliata è stata scritta usando Impostazioni di sviluppo di Visual Basic.

Prerequisiti

  • Per i file usati nella procedura dettagliata viene usata 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 di database di esempio. 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à si crea una soluzione di Visual Studio contenente i riferimenti necessari per compilare ed eseguire un progetto LINQ to SQL.

Per creare una soluzione LINQ to SQL

  1. Scegliere Nuovo progetto dal menu File.

  2. Nella finestra di dialogo Nuovo progetto selezionare Visual Basic nel riquadro Tipi progetto.

  3. Nel riquadro Modelli fare clic su Applicazione console.

  4. Nella casella Nome digitare LinqConsoleApp.

  5. Fare clic su OK.

Aggiunta di riferimenti e direttive LINQ

In questa procedura dettagliata vengono usati 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

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti, quindi scegliere Aggiungi riferimento.

  2. 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.

  3. 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.

  4. 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à.

  • Usare 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é usare 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 usato 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 altre 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 altre informazioni, vedere Introduzione alle query LINQ (C#).

Verrà anche prodotto un output del log per mostrare i comandi SQL generati da LINQ to SQL. Questa funzionalità di registrazione, che usa 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

  1. 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)
    
  2. ‎Premere F5 per eseguire il debug dell'applicazione.

    Nota

    Se l'applicazione genera un errore di run-time, vedere la sezione Risoluzione dei problemi di Learning by Walkthroughs.

    Nella finestra di messaggio viene visualizzato un elenco di sei clienti. Nella finestra della console verrà visualizzato il codice SQL generato.

  3. Fare clic su OK per chiudere la finestra del messaggio.

    L'applicazione verrà chiusa.

  4. Scegliere Save All (Salva tutti) dal menu File.

    Questa applicazione sarà necessaria se si continua con la successiva procedura dettagliata.

Passaggi successivi

L'argomento Procedura dettagliata: Eseguire query tra relazioni (Visual Basic) continua dal punto in cui termina questa procedura dettagliata. La procedura dettagliata Porre query tra relazioni illustra in che modo LINQ to SQL può eseguire query tra tabelle, 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.

Vedi anche