您可以創建一個trigger代替級聯刪除,例如(MS SQL-Server中,未經測試):
CREATE TRIGGER [dbo].[trDeleteTableB] ON [dbo].[TableA]
FOR DELETE
AS
DELETE FROM TableB
WHERE (MessageID IN
(SELECT MessageID
FROM DELETED
WHERE (NOT EXISTS
(SELECT * FROM TableA
WHERE (TableA.MessageID = DELETED.MessageID)))))
另一個想法是延長您的類型化的DataSet。如果你想擴展功能,你不能在DatesetName.designer.cs/vb中更改生成的類(它會在任何更改時重新創建),而是在其名稱中沒有設計器的文件(如果它不存在,則創建它)。然後,您必須擴展部分DataTable類(如果不知道確切的名稱,請查看設計器文件,通常是f.e. TableBDataTable)。
看一看下面的代碼,看看我的意思是,我沒有測試過,但我希望你明白我的意思:
Partial Class Datset1
Partial Class TableBDataTable
Private Sub TableB_RowDeleting(ByVal sender As Object, ByVal e As TableBRowChangeEvent) Handles Me.TableBRowDeleting
If e.Action = DataRowAction.Delete Then
'*** check here if there is another TableARow with this MessageID ***'
e.Row.RejectChanges()
End If
End Sub
End Class
End Class
我試圖做到這一點只在數據集。我不打算通過這些更改來更新SQL。 (我不會理解你的原因) – Bremer 2011-05-04 20:33:24
刪除規則也在數據庫端。然後,您只有選擇刪除級聯刪除並檢查應用程序是否必須刪除子項。 – 2011-05-04 20:38:59
這就是我所害怕的。謝謝。 – Bremer 2011-05-04 21:25:50