sql >> Databasteknik >  >> RDS >> Sqlserver

Vid tabelluppdatering utlöser du en åtgärd i min .NET-kod

Du måste ställa ett par frågor.

Vill du ha någon till ingen av din affärslogik på db-nivå? Uppenbarligen kan en db-utlösare göra detta (utför en åtgärd när ett värde ändras, även om det bara är mycket specifikt värde).

Jag har sett några system som är db trigger tunga. Deras "logik" ligger djupt och starkt kopplad till db-plattformen. Det finns vissa fördelar med det, men de flesta skulle nog säga att nackdelarna är för stora (koppling, avsaknad av inkapsling/återanvändbarhet).

Beroende på vad du gör och dina lutningar kan du:

  1. Se till att alla DAO/BusinessFunctoin-objekt anropar din "event" object.function att göra vad du vill när en viss värdeförändring sker.

  2. Använd en trigger för att anropa din "event" object.function när en viss värdeförändring sker.

  3. Din trigger gör allt.

Jag personligen skulle luta mig mot alternativ 2 där du har en minimal trigger (som helt enkelt aktiverar händelseanropet till din object.function ) så att du inte djupt kopplar din db till din affärslogik.

Alternativ 1 är bra, men kan vara lite krångligt om du inte har en mycket smal uppsättning BF/DAO:er som pratar med detta db table.field du vill titta på.

Alternativ 3 är i och för sig det sämsta valet eftersom du kopplar logik till din db och minskar dess tillgänglighet till ditt affärslogiklager.

Med tanke på det, här är lite information om hur du kan åstadkomma detta via alternativ 2:

Med det här exemplet från MSDN:http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .

Detta visar hur man kör en trigger och anropar ett CLR-objekt i ett projekt.

I ditt projekt skapar du effektivt en utlösare och låter den ringa din klass.

Lägg märke till raden:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Detta definierar när koden aktiveras, sedan kan du inom koden kontrollera din begränsning, sedan aktivera resten av metoden (eller inte), eller anropa en annan object.method efter behov.

Den primära skillnaden mellan att gå direkt till db och lägga till en utlösare är att detta ger dig tillgång till alla objekt i ditt projekt när de distribueras tillsammans.



  1. infoga data i en ny kolumn i en redan existerande tabell

  2. MySQL-fråga:Hur man korrekt identifierar och översätter kommaseparerade resultatvärden till de ursprungliga begreppen med CONCAT_WS och COALESCE

  3. Lagra IPV6 och IPV4 i MySql och läs det också

  4. Oracle-fråga med varje minut om dagen