Поздравления за получаването на SqlDependency
работи (изобщо не съм саркастичен, много се бяха провалили в това).
Сега е време да прочетете Създаване на заявка за известяване тема в MSDN. Ще видите условията, при които заявките са валидни за известия, включително това изискване:
Писах за основите на това как SqlDependency
работи
, може би ще изясни някои недоразумения. И като страничен възел, тъй като използвате Linq, може да се интересувате от LinqToCache , който осигурява мост между Linq
заявки и SqlDependency
.
Друг коментар:не използвайте Start()
и Stop()
вашата SqlDependency
неволю-неволю. Скоро ще съжаляваш. Start()
трябва да се извика точно веднъж, по време на стартиране на приложението, и Stop()
точно веднъж по време на изключване на приложението (стриктно погледнато, е по време на зареждане и разтоварване на домейна на приложението).
Сега относно вашия проблем:нивото на изолация, което има значение, е това на уведомената заявка . Това означава, че заявката, към която прикачвате абонамента, не заявката, на която извършвате UPDATE
(Няма да коментирам мъдростта на извършването на UPDATE при мръсни четения... или мъдростта да се използват мръсни четения за всичко
). Доколкото мога да кажа, кодът, който показвате, не трябва да публикува заявката под read_uncommitted. След като издадете SET TRANSACTION ISOLATION ...
всички последващи транзакции ( следователно всички изрази) в тази сесия ще бъдат под това ниво на изолация. Затваряте връзката (чрез изхвърляне на DataContext) и след това използвате различна връзка. Освен ако ... не използвате пулове за свързване. Добре дошли в клуба на невинните жертви :). Обединяването на връзки течове променя нивото на изолация в Close()
/Open()
граници
. И това е ваш проблем. Има няколко лесни решения:
- Можете (задължително!) да нулирате нивото на изолация изрично след
Open()
- Можете да използвате обхвати на System.Transactions (моята препоръка). Задължително за четене: използване на new TransactionScope() се счита за вредно
- Не използвайте групиране на връзки.
И докато говорим, трябва да прочетете и това: Използване на таблици като опашки .