Alles was hierzu ohne Trigger protokolliert werden soll ist in soweit "gefährlich", als dass Änderungen am Programm vorbei nicht protokolliert werden.
Da für solche Aktionen i.d.R ja nur Stammdaten protokolliert werden sollen, macht es nur Sinn, Tabelle für Tabelle einen Trigger zu erstellen und genau die Felder zu protokollieren, um die es geht.
Es gibt häufig ja interne Felder, Fortschrittsfelder o.ä., die sicherlich nicht der Protokollierung bedürfen.
Wenn du das Ganze auch noch per C# weit weg vom System machst, wächst natürlich die Gefahr und, was ggf. auch nicht zu verachten ist, der Overhead zwischen Server und Client.

Deshalb hat man ja (u.A.) Trigger erfunden, um Aktionen durch zu führen, die unabhängig von den Anwendungsprogrammen sind.

Und zu guter letzt ist Journalisierung und Transaktionssteuerung da sicherlich auch erforderlich.