您可以從數據表相關集合中移除對應的 LINQ to SQL 物件,以刪除資料庫中的數據列。 LINQ to SQL 會將變更轉譯為適當的 SQL DELETE
命令。
LINQ to SQL 不支援或辨識串聯刪除作業。 如果您要刪除資料表中具有條件約束的資料列,您必須完成下列其中一項工作:
在資料庫中的外鍵條件約束中設定
ON DELETE CASCADE
規則。使用您自己的程式代碼先刪除防止父物件刪除的子物件。
否則會拋出例外狀況。 請參閱本主題稍後的第二個程式代碼範例。
備註
您可以覆寫 LINQ to SQL 用於 Insert
、Update
和 Delete
資料庫作業的預設方法。 如需詳細資訊,請參閱 自訂插入、更新和刪除作業。
使用 Visual Studio 的開發人員可以使用物件關係型設計工具來開發預存程式,以達到相同的目的。
下列步驟假設有效的 DataContext 會將您連線到 Northwind 資料庫。 如需詳細資訊,請參閱 如何:連線到資料庫。
若要刪除資料庫中的數據列
查詢要刪除之數據列的資料庫。
呼叫 DeleteOnSubmit 方法。
將變更提交至資料庫。
範例 1
第一個程式代碼範例會查詢資料庫,以取得屬於 Order #11000 的訂單詳細數據、標記這些訂單詳細數據以進行刪除,並將這些變更提交至資料庫。
// 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
範例 2
在第二個範例中,目標是移除訂單 (#10250)。 程序代碼會先檢查 OrderDetails
數據表,以查看要移除的順序是否有子系。 如果訂單有子系,則先是子系,再將訂單標示為移除。
DataContext 會以正確的順序安排實際的刪除操作,以確保傳送至資料庫的刪除命令遵循資料庫的限制條件。
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($"{ordFetch.OrderID} OrderID is marked for deletion.");
}
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()
另請參閱
- 如何管理變更衝突
- 如何:指派預存程式來執行更新、插入和刪除 (O/R 設計工具)
- 進行和提交數據變更