sql >> Database >  >> RDS >> Sqlserver

SqlDependency-abonnement werkt niet bij gebruik van IsolationLevel.ReadUncommitted in (niet-gerelateerde?) Transactie

Gefeliciteerd met het behalen van SqlDependency werken (ik ben helemaal niet sarcastisch, velen hadden hierin gefaald).

Nu is het tijd om Een query voor melding maken te lezen onderwerp op MSDN. U ziet de voorwaarden waaronder zoekopdrachten geldig zijn voor meldingen, inclusief deze vereiste:

Ik schreef over de basisprincipes van hoe SqlDependency werkt , zal misschien een aantal misverstanden ophelderen. En aangezien u Linq gebruikt als zijknooppunt, bent u wellicht geïnteresseerd in LinqToCache , die een brug vormt tussen Linq query's en SqlDependency .

Nog een opmerking:niet Start() en Stop() uw SqlDependency nilly-willy. Je zult er snel spijt van krijgen. Start() hoort precies één keer te worden aangeroepen, tijdens het opstarten van de app, en Stop() precies één keer tijdens het afsluiten van de app (strikt genomen is dit tijdens het laden en lossen van het appdomein).

Nu, over uw probleem:het isolatieniveau dat van belang is, is dat van de aangemelde zoekopdracht . Dat betekent dat de zoekopdracht waaraan u het abonnement koppelt, niet de query waarop u de UPDATE . doet (Ik zal geen commentaar geven op de wijsheid van het doen van UPDATE onder dirty reads... of de wijsheid van het gebruik van vuile reads voor alles ). Voor zover ik weet, mag de code die u laat zien de query niet onder read_uncommitted plaatsen. Nadat u een SET TRANSACTION ISOLATION ... alle volgende transacties (dus alle afschriften) in die sessie vallen onder dat isolatieniveau. U sluit de verbinding (via het afstoten van de DataContext) en gebruikt vervolgens een andere verbinding. Tenzij ... u verbindingspools gebruikt. Welkom bij de club van onschuldige slachtoffers :). Verbindingspooling lekken isolatieniveau verandert over Close() /Open() grenzen . En dat is jouw probleem. Er zijn enkele eenvoudige oplossingen:

En terwijl we aan het praten zijn, moet je dit ook lezen: Tabellen als wachtrijen gebruiken .



  1. Waarom geven deze 2 MySQL-query's verschillende resultaten?

  2. Is het mogelijk om te communiceren met een MySQL-database zonder PHP?

  3. NLS_CHARSET_NAME() Functie in Oracle

  4. Symfony2 Doctrine PDO MySQL Verbinding met LOAD DATA LOKAAL INFILE