Вы можете создать триггер вместо каскадного удаления, например (MS SQL-сервер, не проверено):
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)))))
Другая идея заключается в расширении вашего набранного набора данных.Если вы хотите расширить функциональность, вы не можете изменить сгенерированные классы в DatesetName.designer.cs / vb (он будет воссоздан при любом изменении), но файл без дизайнера в его имени (создайте его, если он не существует).Затем вам нужно расширить частичный класс DataTable (посмотрите в файле конструктора, если вы не знаете точного имени, обычно это 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