मेरे एकीकरण परीक्षण को स्वतंत्र रखने के लिए मैं सभी पुराने डेटा को हटा देता हूं और प्रत्येक परीक्षण से पहले नया परीक्षण डेटा डालता हूं। क्या सभी संस्थाओं के लिए पूछताछ करने और उन्हें एक-एक करके हटाने से बेहतर करने का कोई बेहतर तरीका है?NHibernate का उपयोग कर तालिका में सभी पंक्तियों को हटाने का सबसे अच्छा तरीका?
मैंने एक संग्रहित प्रो लिखने पर विचार किया है जो "tablename से हटाता है;" प्रत्येक तालिका के लिए जिसे साफ़ किया जाना है। यह काफी तेज़ होना चाहिए, लेकिन एनएच के माध्यम से एसक्यूएल प्रश्न पूछने या एसपी को कॉल करने के बिना ऐसा करना अच्छा होगा।
मैं वेनिला एनएचबेर्नेट और लिंक से NHibernate का उपयोग कर रहा हूं। मैं बेलीव कैसल एक्टिव रिकॉर्ड में Foo.DeleteAll() की तरह कुछ है, लेकिन मैं इस प्रोजेक्ट के लिए सक्रिय रिकॉर्ड का उपयोग नहीं करना चाहता हूं।
कोई भी विचार?
धन्यवाद/एरिक
अद्यतन:
चूंकि यह प्रश्न पूछा गया था और उत्तर दिया, प्रगति NHibernate टीम द्वारा बनाया गया है। जैसा कि आयुन्डे this blog post में बताते हैं, अब आप एनएमबीर्नेट को किसी भी संस्था को लाने के बिना सीधे डीएमएल प्रश्न निष्पादित कर सकते हैं।
सभी फू वस्तुओं आप इस तरह कर सकता है हटाने के लिए:
using (ISession session = ...)
using (ITransaction transaction = session.BeginTransaction())
{
session.CreateQuery("delete Foo f").ExecuteUpdate();
transaction.Commit();
}
इस क्वेरी निम्नलिखित एसक्यूएल उत्पन्न होगा:
delete from Foo
जो किसी प्रकार से पहले और उसके बाद संस्थाओं को लाते समय की तुलना में काफी तेजी से होने के लिए उन्हें हटाना हालांकि सावधान रहें, क्योंकि इन तरह के प्रश्न स्तर 1 कैश को प्रभावित नहीं करते हैं।
यदि आप SQL सर्वर का उपयोग कर रहे हैं तो यह 'TRUNCATE तालिका Foo' निष्पादित करने के लिए बहुत अधिक कुशल है, क्योंकि यह न्यूनतम रूप से लॉग इन ऑपरेशन है। 'Foo से हटाएं' निष्पादित करना; पुनर्प्राप्ति उद्देश्यों के लिए सभी हटाए गए लॉग; बड़ी टेबल पर इसे महत्वपूर्ण डिस्क/समय की आवश्यकता होती है। –
ट्रंकेट टेबल लगभग विदेशी उपलब्ध होने पर लगभग कभी उपलब्ध नहीं होता है। –