Procedure: Rijen uit de database verwijderen
U kunt rijen in een database verwijderen door de bijbehorende LINQ te verwijderen uit de tabelgerelateerde verzameling. LINQ naar SQL vertaalt uw wijzigingen in de juiste SQL-opdrachten DELETE
.
LINQ naar SQL biedt geen ondersteuning voor trapsgewijs verwijderen of herkennen. Als u een rij in een tabel met beperkingen wilt verwijderen, moet u een van de volgende taken uitvoeren:
Stel de
ON DELETE CASCADE
regel in de beperking voor refererende sleutels in de database in.Gebruik uw eigen code om eerst de onderliggende objecten te verwijderen die verhinderen dat het bovenliggende object wordt verwijderd.
Anders wordt er een uitzondering gegenereerd. Zie het tweede codevoorbeeld verderop in dit onderwerp.
Notitie
U kunt LINQ overschrijven naar SQL-standaardmethoden voor Insert
, Update
en Delete
databasebewerkingen. Zie Invoegen, Bijwerken en Verwijderen aanpassen voor meer informatie.
Ontwikkelaars die Visual Studio gebruiken, kunnen de Object Relational Designer gebruiken om opgeslagen procedures voor hetzelfde doel te ontwikkelen.
In de volgende stappen wordt ervan uitgegaan dat een geldige DataContext verbinding tot stand brengt met de Northwind-database. Zie Procedure: Verbinding maken naar een database voor meer informatie.
Een rij in de database verwijderen
Voer een query uit op de database voor de rij die moet worden verwijderd.
Roep de DeleteOnSubmit methode aan.
Verzend de wijziging naar de database.
Voorbeeld 1
In dit eerste codevoorbeeld wordt een query uitgevoerd op de database voor ordergegevens die behoren tot Order 11000, worden deze ordergegevens gemarkeerd voor verwijdering en worden deze wijzigingen naar de database verzonden.
// 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
Voorbeeld 2
In dit tweede voorbeeld is het doel om een order te verwijderen (#10250). De code onderzoekt eerst de OrderDetails
tabel om te zien of de volgorde die moet worden verwijderd, onderliggende items bevat. Als de bestelling kinderen heeft, worden eerst de kinderen en vervolgens de bestelling gemarkeerd voor verwijdering. Hiermee DataContext worden de werkelijke verwijderingen in de juiste volgorde geplaatst, zodat opdrachten die naar de database worden verzonden, voldoen aan de beperkingen van de database.
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 present 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()