Procedura: eliminare righe dal databaseHow to: Delete Rows From the Database

È possibile eliminare righe in un database rimuovendo corrispondente LINQ to SQLLINQ to SQL oggetti dall'insieme alla tabella correlata.You can delete rows in a database by removing the corresponding LINQ to SQLLINQ to SQL objects from their table-related collection. LINQ to SQLLINQ to SQL traduce le modifiche apportate alla SQL appropriate DELETE comandi. translates your changes to the appropriate SQL DELETE commands.

LINQ to SQLLINQ to SQL non supporta o non riconosce operazioni di eliminazione a catena. does not support or recognize cascade-delete operations. Se si desidera eliminare una riga in una tabella contenente vincoli, è necessario effettuare una delle attività seguenti:If you want to delete a row in a table that has constraints against it, you must complete either of the following tasks:

  • Impostare la regola ON DELETE CASCADE nel vincolo di chiave esterna del database.Set the ON DELETE CASCADE rule in the foreign-key constraint in the database.

  • Usare il codice personalizzato per eliminare prima gli oggetti figlio che impediscono l'eliminazione dell'oggetto padre.Use your own code to first delete the child objects that prevent the parent object from being deleted.

In caso contrario, viene generata un'eccezione.Otherwise, an exception is thrown. Vedere il secondo esempio di codice riportato più avanti in questo argomento.See the second code example later in this topic.

Nota

È possibile eseguire l'override dei metodi predefiniti LINQ to SQLLINQ to SQL per le operazioni di database Insert, Updatee Delete.You can override LINQ to SQLLINQ to SQL default methods for Insert, Update, and Delete database operations. Per ulteriori informazioni, vedere personalizzazione di operazioni di inserimento, aggiornamento ed eliminare.For more information, see Customizing Insert, Update, and Delete Operations.

Gli sviluppatori che usano Visual Studio è possono utilizzare il Object Relational DesignerObject Relational Designer per sviluppare stored procedure allo stesso scopo.Developers using Visual Studio can use the Object Relational DesignerObject Relational Designer to develop stored procedures for the same purpose.

Per l'esecuzione dei passaggi seguenti si presuppone l'uso di un oggetto DataContext valido per la connessione al database Northwind.The following steps assume that a valid DataContext connects you to the Northwind database. Per ulteriori informazioni, vedere procedura: connettersi a un Database.For more information, see How to: Connect to a Database.

Per eliminare una riga dal databaseTo delete a row in the database

  1. Eseguire una query sul database per la riga da eliminare.Query the database for the row to be deleted.

  2. Chiamare il metodo DeleteOnSubmit.Call the DeleteOnSubmit method.

  3. Inviare le modifiche al database.Submit the change to the database.

EsempioExample

Nel primo esempio di codice viene eseguita una query sul database per ottenere dettagli relativi all'ordine N. 11000, questi dettagli relativi all'ordine vengono contrassegnati per l'eliminazione e tali modifiche vengono inviate al database.This first code example queries the database for order details that belong to Order #11000, marks these order details for deletion, and submits these changes to the database.

// Query the database for the rows to be deleted.
var deleteOrderDetails =
    from details in db.OrderDetails
    where details.OrderID == 11000
    select details;

foreach (var detail in deleteOrderDetails)
{
    db.OrderDetails.DeleteOnSubmit(detail);
}
                        
try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Provide for exceptions.
}
' Query the database for the rows to be deleted.
Dim deleteOrderDetails = _
    From details In db.OrderDetails() _
    Where details.OrderID = 11000 _
    Select details

For Each detail As OrderDetail In deleteOrderDetails
    db.OrderDetails.DeleteOnSubmit(detail)
Next

Try
    db.SubmitChanges()
Catch ex As Exception
    Console.WriteLine(ex)
    ' Provide for exceptions
End Try

EsempioExample

Nel secondo esempio, l'obiettivo è l'eliminazione di un ordine (N. 10250).In this second example, the objective is to remove an order (#10250). Il codice esamina innanzitutto la tabella OrderDetails per verificare se l'ordine da eliminare dispone di elementi figlio.The code first examines the OrderDetails table to see whether the order to be removed has children there. In tal caso, gli elementi figlio e successivamente l'ordine vengono contrassegnati per l'eliminazione.If the order has children, first the children and then the order are marked for removal. L'oggetto DataContext ordina correttamente le eliminazioni effettive in modo che i comandi di eliminazione inviati al database si attengano ai vincoli del database.The DataContext puts the actual deletes in correct order so that delete commands sent to the database abide by the database constraints.

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

db.Log = Console.Out;

// Specify order to be removed from database
int reqOrder = 10250;

// Fetch OrderDetails for requested order.
var ordDetailQuery =
    from odq in db.OrderDetails
    where odq.OrderID == reqOrder
    select odq;

foreach (var selectedDetail in ordDetailQuery)
{
    Console.WriteLine(selectedDetail.Product.ProductID);
    db.OrderDetails.DeleteOnSubmit(selectedDetail);
}

// Display progress.
Console.WriteLine("detail section finished.");
Console.ReadLine();

// Determine from Detail collection whether parent exists.
if (ordDetailQuery.Any())
{
    Console.WriteLine("The parent is presesnt in the Orders collection.");
    // Fetch Order.
    try
    {
        var ordFetch =
            (from ofetch in db.Orders
             where ofetch.OrderID == reqOrder
             select ofetch).First();
        db.Orders.DeleteOnSubmit(ordFetch);
        Console.WriteLine("{0} OrderID is marked for deletion.", ordFetch.OrderID);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}
else
{
    Console.WriteLine("There was no parent in the Orders collection.");
}


// Display progress.
Console.WriteLine("Order section finished.");
Console.ReadLine();

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    Console.ReadLine();
}

// Display progress.
Console.WriteLine("Submit finished.");
Console.ReadLine();
Dim db As New Northwnd("c:\northwnd.mdf")

db.Log = Console.Out
' Specify order to be removed from database.
Dim reqOrder As Integer = 10252

' Fetch OrderDetails for requested order.
Dim ordDetailQuery = _
From odq In db.OrderDetails _
Where odq.OrderID = reqOrder _
Select odq

For Each selectedDetail As OrderDetail In ordDetailQuery
    Console.WriteLine(selectedDetail.Product.ProductID)
    db.OrderDetails.DeleteOnSubmit(selectedDetail)
Next

' Display progress.
Console.WriteLine("Detail section finished.")
Console.ReadLine()

' Determine from Detail collection whether parent exists.
If ordDetailQuery.Any Then
    Console.WriteLine("The parent is present in the Orders collection.")
    ' Fetch order.
    Try
        Dim ordFetch = _
        (From ofetch In db.Orders _
        Where ofetch.OrderID = reqOrder _
        Select ofetch).First()

        db.Orders.DeleteOnSubmit(ordFetch)
        Console.WriteLine("{0} OrderID is marked for deletion.,", ordFetch.OrderID)

    Catch ex As Exception
        Console.WriteLine(ex.Message)
        Console.ReadLine()
    End Try

Else
    Console.WriteLine("There was no parent in the Orders collection.")

End If


' Display progress.
Console.WriteLine("Order section finished.")
Console.ReadLine()

Try
    db.SubmitChanges()

Catch ex As Exception
    Console.WriteLine(ex.Message)
    Console.ReadLine()

End Try

' Display progress.
Console.WriteLine("Submit finished.")
Console.ReadLine()

Vedere ancheSee Also

Procedura: gestire i conflitti di modificheHow to: Manage Change Conflicts
Procedura: assegnare stored procedure per eseguire aggiornamenti, inserimenti ed eliminazioni (O/R Designer)How to: Assign stored procedures to perform updates, inserts, and deletes (O/R Designer)
Creazione e invio di modifiche dei datiMaking and Submitting Data Changes