SqlDependency
प्राप्त करने के लिए बधाई काम कर रहा हूँ (मैं बिल्कुल भी व्यंग्य नहीं कर रहा हूँ, कई लोग इसमें असफल हो गए थे)।
अब पढ़ने का समय है अधिसूचना के लिए क्वेरी बनाना एमएसडीएन पर विषय। आपको वे शर्तें दिखाई देंगी जिनके तहत क्वेरीज़ इस आवश्यकता सहित सूचनाओं के लिए मान्य हैं:
मैंने कैसे SqlDependency
की बुनियादी बातों के बारे में लिखा काम करता है
, शायद कुछ गलतफहमियों को दूर करेंगे। और, एक साइड नोड के रूप में, चूंकि आप लिंक का उपयोग कर रहे हैं, इसलिए आपको LinqToCacheमें रुचि हो सकती है। ए> , जो Linq
. के बीच एक सेतु प्रदान करता है प्रश्न और SqlDependency
।
एक अन्य टिप्पणी:Start()
न करें और Stop()
आपका SqlDependency
निली-विली। आपको जल्द ही इसका पछतावा होगा। Start()
ऐप स्टार्टअप के दौरान ठीक एक बार कॉल किया जाना चाहिए, और Stop()
ऐप शटडाउन के दौरान ठीक एक बार (सख्ती से बोलना, एपडोमेन लोडिंग और अनलोडिंग के दौरान है)।
अब, आपकी समस्या के बारे में:आइसोलेशन स्तर जो मायने रखता है वह अधिसूचित क्वेरी . में से एक है . इसका अर्थ है, जिस क्वेरी पर आप सदस्यता संलग्न करते हैं, नहीं जिस क्वेरी पर आप UPDATE
करते हैं (मैं गंदे पढ़ने के तहत अद्यतन करने के ज्ञान पर टिप्पणी नहीं करूंगा... या गंदे पढ़ने का ज्ञान किसी भी चीज के लिए पढ़ता है
) जहां तक मैं कह सकता हूं, आपके द्वारा दिखाया गया कोड क्वेरी को read_uncommitted के अंतर्गत पोस्ट नहीं करना चाहिए। आपके द्वारा SET TRANSACTION ISOLATION ...
. जारी करने के बाद उस सत्र में बाद के सभी लेन-देन (सभी बयानों को हटा दें) उस अलगाव स्तर के तहत होंगे। आप कनेक्शन बंद करते हैं (डेटाकॉन्टेक्स्ट के निपटान के माध्यम से) और फिर एक अलग कनेक्शन का उपयोग करें। जब तक ... आप कनेक्शन पूल का उपयोग नहीं करते। निर्दोष पीड़ितों के क्लब में आपका स्वागत है :)। कनेक्शन पूलिंग से Close()
में आइसोलेशन लेवल में बदलाव होता है। /Open()
सीमाएं
. और यही आपकी समस्या है। कुछ आसान उपाय हैं:
- आप
Open()
. के बाद आइसोलेशन लेवल को स्पष्ट रूप से रीसेट कर सकते हैं (जरूरी!) - आप System.Transactions स्कोप (मेरी सिफारिश) का उपयोग कर सकते हैं। अनिवार्य पठन: नए TransactionScope () का उपयोग करना हानिकारक माना जाता है
- कनेक्शन पूलिंग का उपयोग न करें।
और जब हम बात कर रहे हों, तो आपको इसे भी पढ़ना होगा: टेबल्स को क्यू के रूप में उपयोग करना .