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

SqlDependency-abonnement fungerer ikke, når IsolationLevel.ReadUncommitted bruges i (ikke-relateret?) Transaktion

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:

Og mens vi taler, skal du også læse dette: Brug af tabeller som køer .



  1. PostgreSQL-begrænsning - kun én række kan have flag sat

  2. MySQL Rating System - Find Rating

  3. Kan jeg tilføje en UNIK begrænsning til en PostgreSQL-tabel, efter at den allerede er oprettet?

  4. Hvordan får man tabeller i andre databaser i SQL Server 2005, hvilken visning afhænger af?