Der er ikke en hård og hurtig regel, men jeg ser flere grunde til at kontrollere transaktioner fra forretningsniveauet:
-
Kommunikation på tværs af datalagergrænser. Transaktioner behøver ikke at være mod et RDBMS; de kan være imod en række forskellige enheder.
-
Muligheden for at rulle tilbage/forpligte transaktioner baseret på forretningslogik, som muligvis ikke er tilgængelige for den bestemte lagrede procedure, du kalder.
-
Evnen til at påkalde et vilkårligt sæt forespørgsler inden for en enkelt transaktion. Dette eliminerer også behovet for at bekymre dig om antallet af transaktioner.
-
Personlig præference:c# har en mere elegant struktur til at deklarere transaktioner:en
using
blok. Til sammenligning har jeg altid oplevet, at transaktioner i lagrede procedurer er besværlige, når man går til rollback/commit.
Dette kan eller kan ikke være et problem afhængigt af hvor mange transaktioner der åbnes (det er ikke klart, om dette er et enkelt job eller en procedure, der køres med høj samtidighed). Jeg vil foreslå at se på, hvilke låse der placeres på genstande, og hvor længe disse låse bliver holdt.
Husk på, at validering muligvis bør låse; hvad hvis dataene ændres mellem det tidspunkt, du validerede dem, og det tidspunkt, hvor handlingen finder sted?
Hvis det er et problem, kan du opdele den fornærmende procedure i to procedurer og ringe til den ene uden for et TransactionScope
.