एनएचबर्ननेट में, मैं एक उदाहरण पुनर्प्राप्त करना चाहता हूं, और रिकॉर्ड पर एक विशेष लॉक डालता हूं जो डेटाबेस पर पुनर्प्राप्त इकाई का प्रतिनिधित्व करता है।NHibernate: अनन्य लॉकिंग
With.Transaction (session, IsolationLevel.Serializable, delegate
{
ICriteria crit = session.CreateCriteria (typeof (TarificationProfile));
crit.SetLockMode (LockMode.Upgrade);
crit.Add (Expression.Eq ("Id", tarificationProfileId));
TarificationProfile profile = crit.UniqueResult<TarificationProfile>();
nextNumber = profile.AttestCounter;
profile.AttestCounter++;
session.SaveOrUpdate (profile);
});
आप देख सकते हैं, मैं इस मानदंड 'अपग्रेड करें' के लिए LockMode सेट:
अभी, मैं इस कोड है।
हालांकि, मैं एक असली अनन्य लॉक का उपयोग करने के लिए सक्षम होना चाहते हैं: यह जो updlock
और rowlock
ताला लगा संकेत का उपयोग करता है एसक्यूएल सर्वर के लिए एक एसक्यूएल बयान जारी करता है। यही है, जब तक कि मैंने लॉक जारी नहीं किया है, तब तक अन्य लोग इस रिकॉर्ड को पढ़ सकते हैं। दूसरे शब्दों में, मैं की बजाय xlock
लॉकिंग संकेत का उपयोग करने में सक्षम होना चाहता हूं।
मैं नहीं जानता कि कैसे (या यहां तक कि अगर) मुझे लगता है कि प्राप्त कर सकते हैं .... शायद किसी ने मुझसे इस :)
तो यह वास्तव में आवश्यक है, मैं SQLQuery कार्यक्षमता का उपयोग कर सकते हैं के बारे में कुछ संकेत दे सकते हैं NHibernate का, और अपना स्वयं का SQL क्वेरी लिखें, लेकिन, मैं जितना संभव हो उससे बचना चाहता हूं।
आप एक विशेष ताला प्राप्त करने के लिए क्यों चाहते हो? शायद अन्य समाधान हैं। –
क्यों? क्योंकि यह जरूरी है ... मेरी इकाई में एक काउंटर शामिल है जिसका उपयोग किया जाना चाहिए, और मुझे पूरी तरह से यह सुनिश्चित करना होगा कि यह काउंटर सही ढंग से उपयोग किया जाता है ... –
क्या आपको पढ़ते समय लॉक नहीं करना चाहिए? –