Tillykke med at have fået SqlDependency
arbejder (jeg er slet ikke sarkastisk, mange havde fejlet i dette).
Nu er det tid til at læse Oprettelse af en forespørgsel til notifikation emne på MSDN. Du kan se de betingelser, hvorunder forespørgsler er gyldige for meddelelser, herunder dette krav:
Jeg skrev om det grundlæggende om hvordan SqlDependency
virker
, vil måske afklare nogle misforståelser. Og som en sideknude, da du bruger Linq, kan du være interesseret i LinqToCache
a> , som giver en bro mellem Linq
forespørgsler og SqlDependency
.
En anden kommentar:Undlad at Start()
og Stop()
din SqlDependency
nilly-willy. Du vil snart fortryde det. Start()
formodes at blive kaldt præcis én gang, under app-start, og Stop()
nøjagtigt én gang under app-nedlukning (strengt taget er under indlæsning og aflæsning af appdomæne).
Nu om dit problem:isolationsniveauet, der betyder noget, er det i meddelte forespørgsel . Det betyder, at den forespørgsel, som du vedhæfter abonnementet på, ikke den forespørgsel, som du laver UPDATE
på (Jeg vil ikke kommentere det fornuftige i at lave OPDATERING under beskidte læsninger... eller klogskaben ved at bruge dirty reads til hvad som helst
). Så vidt jeg kan se, bør koden du viser ikke sende forespørgslen under read_uncommitted. Når du har udstedt en SET TRANSACTION ISOLATION ...
alle efterfølgende transaktioner (ergo alle udsagn) i den session vil være under dette isolationsniveau. Du lukker forbindelsen (via bortskaffelse af DataContext) og bruger derefter en anden forbindelse. Medmindre ... du bruger forbindelsespuljer. Velkommen til klubben af uskyldige ofre :). Forbindelsespooling lækker isolationsniveauændringer på tværs af Close()
/Open()
grænser
. Og det er dit problem. Der er nogle nemme løsninger:
- Du kan (skal!) nulstille isolationsniveauet eksplicit efter
Open()
- Du kan bruge System.Transactions-omfang (min anbefaling). Obligatorisk læsning: ved at bruge nye TransactionScope() betragtes som skadelig
- Brug ikke forbindelsespooling.
Og mens vi taler, skal du også læse dette: Brug af tabeller som køer .