Operazioni di inserimento, aggiornamento ed eliminazione

In LINQ to SQL, le operazioni Insert, Update e Delete vengono eseguite aggiungendo, modificando e rimuovendo oggetti nel modello a oggetti. Per impostazione predefinita, le azioni vengono convertite da LINQ to SQL in SQL e le modifiche vengono inviate al database.

In LINQ to SQL viene offerta la massima flessibilità per quanto riguarda la modifica e il salvataggio in modo permanente delle modifiche apportate agli oggetti. Non appena gli oggetti entità sono disponibili, recuperandoli tramite una query o costruendoli di nuovo, è possibile modificarli nell'applicazione come oggetti normali. In altre parole, è possibile modificarne i valori e aggiungerli o rimuoverli dalle raccolte. In LINQ to SQL viene tenuta traccia delle modifiche, che verranno trasmesse di nuovo al database quando si chiama SubmitChanges.

Nota

LINQ to SQL non supporta o non riconosce operazioni di eliminazione a catena. Se si desidera eliminare una riga di una tabella contenente vincoli, è necessario impostare la regola ON DELETE CASCADE nel vincolo di chiave esterna del database o usare il proprio codice per eliminare innanzitutto gli oggetti figlio che impediscono l'eliminazione dell'oggetto padre. In caso contrario, viene generata un'eccezione. Per altre informazioni, vedere Procedura: eliminare righe dal database.

Nei frammenti di codice riportati di seguito vengono usate le classi Customere Order del database di esempio Northwind. Le definizioni di classe non sono illustrate per brevità.

Northwnd db = new Northwnd(@"c:\Northwnd.mdf");

// Query for a specific customer.
var cust =
    (from c in db.Customers
     where c.CustomerID == "ALFKI"
     select c).First();

// Change the name of the contact.
cust.ContactName = "New Contact";

// Create and add a new Order to the Orders collection.
Order ord = new Order { OrderDate = DateTime.Now };
cust.Orders.Add(ord);

// Delete an existing Order.
Order ord0 = cust.Orders[0];

// Removing it from the table also removes it from the Customer’s list.
db.Orders.DeleteOnSubmit(ord0);

// Ask the DataContext to save all the changes.
db.SubmitChanges();
Dim db As New Northwnd("…\Northwnd.mdf")

Dim cust As Customer = _
(From c In db.Customers _
 Where c.CustomerID = "ALFKI" _
 Select c) _
.First()

' Change the name of the contact.
cust.ContactName = "New Contact"

' Create and add a new Order to Orders collection.
Dim ord As New Order With {.OrderDate = DateTime.Now}
cust.Orders.Add(ord)

' Delete an existing Order.
Dim ord0 As Order = cust.Orders(0)

' Removing it from the table also removes it from 
' the Customer’s list.
db.Orders.DeleteOnSubmit(ord0)

' Ask the DataContext to save all the changes.
db.SubmitChanges()

Quando si chiama SubmitChanges, LINQ to SQL genera automaticamente ed esegue i comandi SQL necessari per trasmettere di nuovo le modifiche al database.

Nota

È possibile eseguire l'override di questo comportamento usando una logica personalizzata, in genere mediante una stored procedure. Per altre informazioni, vedere Responsabilità dello sviluppatore nell'override del comportamento predefinito.

Gli sviluppatori che usano Visual Studio possono usare Object Relational Designer per sviluppare stored procedure per questo scopo.

Vedi anche