Procedura dettagliata: modifica dei dati (C#)

In questa procedura dettagliata viene descritto uno scenario LINQ to SQL end-to-end di base per l'aggiunta, la modifica e l'eliminazione dei dati in un database. Si utilizzerà una copia del database di esempio Northwind per aggiungere un cliente, modificare il nome di un cliente ed eliminare un ordine.

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 è stata scritta usando Impostazioni di sviluppo di Visual C#.

Prerequisiti

Per l'esecuzione di questa procedura sono richiesti i seguenti elementi:

  • Una cartella dedicata ("c:\linqtest6") in cui inserire i file usati nella procedura dettagliata. Creare la cartella prima di avviare la procedura.

  • 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 northwnd.mdf nella cartella c:\linqtest6.

  • Un file di codice C# generato dal database Northwind.

    È possibile generare questo file usando Object Relational Designer o lo strumento SQLMetal. Questa procedura dettagliata è stata scritta usando lo strumento SQLMetal con la riga di comando seguente:

    sqlmetal /code:"c:\linqtest6\northwind.cs" /language:csharp "C:\linqtest6\northwnd.mdf" /pluralize

    Per altre informazioni, vedere SqlMetal.exe (strumento per la generazione del codice).

Panoramica

La procedura dettagliata è costituita da sei attività principali:

  • Creazione della soluzione LINQ to SQL in Visual Studio.

  • Aggiunta del file di codice del database al progetto.

  • Creazione di un nuovo oggetto Customer

  • Modifica del nome di contatto di un cliente.

  • Eliminazione di un ordine.

  • Invio delle modifiche al database Northwind.

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. In Visual Studio scegliere Nuovo dal menu File e quindi fare clic su Progetto.

  2. Nel riquadro Tipi progetto nella finestra di dialogo Nuovo progetto fare clic su Visual C#.

  3. Nel riquadro Modelli fare clic su Applicazione console.

  4. Nella casella Nome digitare LinqDataManipulationApp.

  5. Nella casella Percorso verificare il percorso per l'archiviazione dei file di progetto.

  6. 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 è elencato come un riferimento nel progetto, aggiungerlo seguendo le indicazioni fornite nei passaggi seguenti:

Per aggiungere System.Data.Linq

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

  2. Nella finestra di dialogo Aggiungi riferimento fare clic su .NET, fare clic sull'assembly System.Data.Linq e quindi fare clic su OK.

    L'assembly verrà aggiunto al progetto.

  3. Aggiungere le seguenti direttive all'inizio di Program.cs:

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

Aggiunta del file di codice di Northwind al progetto

In questa procedura si presuppone che sia stato usato lo strumento SQLMetal per generare un file di codice dal database di esempio Northwind. Per altre informazioni, vedere la sezione precedente relativa ai prerequisiti.

Per aggiungere il file di codice di Northwind al progetto

  1. Nel menu Progetto fare clic su Aggiungi elemento esistente.

  2. Nella finestra di dialogo Aggiungi elemento esistente individuare il file c:\linqtest6\northwind.cs e quindi fare clic su Aggiungi.

    Il file northwind.cs viene aggiunto al progetto.

Impostazione della connessione al database

Eseguire innanzitutto il test della connessione al database. Notare in particolare che nel nome del database, Northwnd, non è presente il carattere i. Se vengono generati errori nei passaggi successivi, esaminare il file northwind.cs per determinare come è digitata la classe parziale Northwind.

Per impostare e testare la connessione al database

  1. Digitare o incollare il codice che segue nel metodo Main della classe Program:

    // Use the following connection string.
    Northwnd db = new Northwnd(@"c:\linqtest6\northwnd.mdf");
    
    // Keep the console window open after activity stops.
    Console.ReadLine();
    
  2. A questo punto premere F5 per eseguire il test dell'applicazione.

    Viene visualizzata una finestra Console.

    È possibile chiudere l'applicazione premendo INVIO nella finestra Console o facendo clic su Termina debug dal menu Debug di Visual Studio.

Creazione di una nuova entità

La creazione di una nuova entità è un processo semplice. È possibile creare oggetti, ad esempio Customer, usando la parola chiave new.

In questa e nelle sezioni seguenti vengono apportate modifiche solo alla cache locale. Non viene inviata alcuna modifica al database finché, verso la fine di questa procedura dettagliata, non si chiamerà SubmitChanges.

Per aggiungere un nuovo oggetto dell'entità Customer

  1. Creare un nuovo oggetto Customer aggiungendo il codice riportato di seguito prima di Console.ReadLine(); nel metodo Main:

    // Create the new Customer object.
    Customer newCust = new Customer();
    newCust.CompanyName = "AdventureWorks Cafe";
    newCust.CustomerID = "ADVCA";
    
    // Add the customer to the Customers table.
    db.Customers.InsertOnSubmit(newCust);
    
    Console.WriteLine("\nCustomers matching CA before insert");
    
    foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA")))
    {
        Console.WriteLine("{0}, {1}, {2}",
            c.CustomerID, c.CompanyName, c.Orders.Count);
    }
    
  2. Premere F5 per eseguire il debug della soluzione.

  3. Premere INVIO nella finestra Console per terminare il debug e continuare la procedura dettagliata.

Aggiornamento di un'entità

Nei passaggi seguenti si recupererà un oggetto Customer e si modificherà una delle relative proprietà.

Per modificare il nome di un oggetto Customer

  • Aggiungere il codice seguente sopra Console.ReadLine();:

    // Query for specific customer.
    // First() returns one object rather than a collection.
    var existingCust =
        (from c in db.Customers
         where c.CustomerID == "ALFKI"
         select c)
        .First();
    
    // Change the contact name of the customer.
    existingCust.ContactName = "New Contact";
    

Eliminazione di un'entità

Usando lo stesso oggetto Customer, è possibile eliminare il primo ordine.

Nel codice seguente viene illustrato come interrompere le relazioni tra le righe e come eliminare una riga dal database. Aggiungere il codice seguente prima di Console.ReadLine per vedere come è possibile eliminare oggetti:

Per eliminare una riga

  • Aggiungere il codice seguente sopra Console.ReadLine();:

    // Access the first element in the Orders collection.
    Order ord0 = existingCust.Orders[0];
    
    // Access the first element in the OrderDetails collection.
    OrderDetail detail0 = ord0.OrderDetails[0];
    
    // Display the order to be deleted.
    Console.WriteLine
        ("The Order Detail to be deleted is: OrderID = {0}, ProductID = {1}",
        detail0.OrderID, detail0.ProductID);
    
    // Mark the Order Detail row for deletion from the database.
    db.OrderDetails.DeleteOnSubmit(detail0);
    

Invio di modifiche al database

Il passaggio finale necessario per la creazione, l'aggiornamento e l'eliminazione di oggetti consiste nell'inviare effettivamente le modifiche al database. Senza questo passaggio le modifiche vengono applicate solo localmente e non saranno visualizzate nei risultati della query.

Per inviare le modifiche al database

  1. Inserire il codice seguente sopra Console.ReadLine:

    db.SubmitChanges();
    
  2. Inserire il codice seguente dopo SubmitChanges per mostrare gli effetti precedenti e successivi all'invio delle modifiche:

    Console.WriteLine("\nCustomers matching CA after update");
    foreach (var c in db.Customers.Where(cust =>
        cust.CustomerID.Contains("CA")))
    {
        Console.WriteLine("{0}, {1}, {2}",
            c.CustomerID, c.CompanyName, c.Orders.Count);
    }
    
  3. Premere F5 per eseguire il debug della soluzione.

  4. Premere INVIO nella finestra Console per chiudere l'applicazione.

Nota

Dopo avere aggiunto il nuovo oggetto Customer mediante l'invio delle modifiche, non sarà possibile eseguire nuovamente questa soluzione così com'è. Per eseguire nuovamente la soluzione, modificare il nome del cliente e l'ID dell'oggetto Customer da aggiungere.

Vedi anche