sql >> Database teknologi >  >> RDS >> Sqlserver

Ved tabelopdatering skal du udløse en handling i min .NET-kode

Du skal stille et par spørgsmål.

Vil du have noget til ingen af ​​din forretningslogik på db-niveau? En db-trigger kunne naturligvis gøre dette (udfør en handling, når en værdi ændres, selvom kun en meget specifik værdi).

Jeg har set nogle systemer der er db trigger tunge. Deres 'logik' ligger dybt og stærkt sammenkoblet med db-platformen. Det er der nogle fordele ved, men de fleste vil nok sige, at ulemperne er for store (kobling, manglende indkapsling/genanvendelighed).

Afhængigt af hvad du laver og dine tilbøjeligheder kan du:

  1. Sørg for, at alle DAO/BusinessFunctoin-objekter kalder din 'event' object.function at gøre, hvad du vil, når der sker en bestemt værdiændring.

  2. Brug en trigger til at kalde din 'begivenhed' object.function når der sker en vis værdiændring.

  3. Din trigger gør alt.

Jeg personligt ville læne mig op ad Option 2, hvor du har en minimal trigger (som blot udløser hændelseskaldet til din object.function ), så du ikke dybt kobler din db til din forretningslogik.

Mulighed 1 er fint, men kan være lidt besværligt, medmindre du har et meget snævert sæt BF/DAO'er, der taler til dette db table.field, du vil se.

Mulighed 3 er imho det værste valg, da du kobler logik til din db og reducerer dens tilgængelighed til dit forretningslogiklag.

I betragtning af det, her er nogle oplysninger om at opnå dette via valgmulighed 2:

Brug af dette eksempel fra MSDN:http://msdn.microsoft.com/da -us/library/938d9dz2.aspx .

Dette viser, hvordan man får en trigger til at køre og kalder et CLR-objekt i et projekt.

I dit projekt opretter du effektivt en trigger og får den til at ringe til din klasse.

Bemærk linjen:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Dette definerer, hvornår koden udløses, så inden for koden kan du kontrollere din begrænsning, derefter affyre resten af ​​metoden (eller ej), eller kalde en anden object.method efter behov.

Den primære forskel mellem at gå direkte til db'en og tilføje en trigger er, at dette giver dig adgang til alle objekterne i dit projekt, når de implementeres sammen.



  1. Returner det oprindelige frø af en identitetskolonne i SQL Server

  2. hvordan man bruger Oracles regexp_like i Hibernate HQL?

  3. Tildel den samlede værdi af måneden til hver dag i måneden

  4. Kalder lagret procedure med returværdi