Je moet een paar vragen stellen.
Wilt u geen tot niets van uw bedrijfslogica op db-niveau? Het is duidelijk dat een db-trigger dit zou kunnen doen (een actie uitvoeren wanneer een waarde wordt gewijzigd, zelfs als alleen een zeer specifieke waarde).
Ik heb een aantal systemen gezien die db trigger zwaar zijn. Hun 'logica' is diep en sterk verbonden met het db-platform. Daar zitten wat voordelen aan, maar de meeste mensen zullen waarschijnlijk zeggen dat de nadelen te groot zijn (koppeling, gebrek aan inkapseling/herbruikbaarheid).
Afhankelijk van wat u doet en uw voorkeuren kunt u:
-
Zorg ervoor dat alle DAO/BusinessFunctoin-objecten uw 'event'
object.function
. aanroepen om te doen wat je wilt wanneer een bepaalde waardeverandering optreedt. -
Gebruik een trigger om uw 'event'
object.function
. aan te roepen wanneer een bepaalde waardeverandering optreedt. -
Je trigger doet alles.
Persoonlijk zou ik naar optie 2 leunen, waar je een minimale trigger hebt (die eenvoudig de gebeurtenisaanroep naar je object.function
afvuurt ) zodat u uw db niet diep koppelt aan uw bedrijfslogica.
Optie 1 is prima, maar kan een beetje lastig zijn, tenzij je een zeer kleine set BF/DAO's hebt die met deze db table.field praten die je wilt bekijken.
Optie 3 is volgens mij de slechtste keuze omdat je logica aan je db koppelt en de toegankelijkheid tot je bedrijfslogicalaag vermindert.
Gezien dat, hier is wat informatie om dit te bereiken via Opties 2:
Met dit voorbeeld van MSDN:http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .
Dit laat zien hoe je een trigger uitvoert en een CLR-object in een project aanroept.
In feite creëer je in je project een trigger en laat je deze je klas bellen.
Let op de regel:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]
Dit definieert wanneer de code wordt geactiveerd. Binnen de code kunt u uw beperking controleren en vervolgens de rest van de methode activeren (of niet), of een andere object.method
aanroepen. naar behoefte.
Het belangrijkste verschil tussen rechtstreeks naar de database gaan en een trigger toevoegen, is dat dit je toegang geeft tot alle objecten in je project wanneer ze samen worden geïmplementeerd.