sql >> Database >  >> RDS >> Sqlserver

Activeer bij tafelupdate een actie in mijn .NET-code

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:

  1. Zorg ervoor dat alle DAO/BusinessFunctoin-objecten uw 'event' object.function . aanroepen om te doen wat je wilt wanneer een bepaalde waardeverandering optreedt.

  2. Gebruik een trigger om uw 'event' object.function . aan te roepen wanneer een bepaalde waardeverandering optreedt.

  3. 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.



  1. Hoe het verschil tussen twee datums in SQLite te berekenen

  2. Hoe de volgende alfanumerieke ID te krijgen op basis van bestaande waarde van MySQL

  3. Wat is transaction.commit() in Hibernate?

  4. Hoe kopieer je in MySQL de inhoud van de ene tabel naar een andere tabel binnen dezelfde database?