たとえば、カスケード削除の代わりにトリガーを作成できます(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)))))
別のアイデアは、型指定されたデータセットを拡張することです。機能を拡張したい場合は、DatesetName.designer.cs/vb で生成されたクラスを変更することはできませんが (変更すると再作成されます)、名前にデザイナーのないファイルを変更できます (存在しない場合は作成します)。次に、部分的な DataTable クラスを拡張する必要があります (正確な名前がわからない場合は、デザイナー ファイルを参照してください。通常は fe 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