रेल के पास एक बहुत सुविधाजनक विशिष्टता सत्यापन है।विशिष्टता के एएसपी.नेट एमवीसी सत्यापन
एएसपी.नेट एमवीसी नहीं करता है।
मुझे यह सुनिश्चित करने की ज़रूरत है कि उपयोगकर्ता द्वारा दर्ज किया गया ई-मेल पता अभी तक किसी द्वारा पंजीकृत नहीं किया गया है।
मैं इस तरह के सत्यापन करने का केवल एक ही तरीका देख सकता हूं: UniqueAttribute क्लास में एक नया डेटा संदर्भ ऑब्जेक्ट बनाएं।
लेकिन मुझे डर है कि एक नए डेटा संदर्भ ऑब्जेक्ट पर स्मृति बर्बाद कर रहा है केवल एक सत्यापन के लिए खतरनाक है।
क्या मैं गलत हूँ? क्या ऐसा करने का कोई बेहतर तरीका है?
अद्यतन
यह मैं अब तक
public class UniqueEmailAttribute : ValidationAttribute {
public override bool IsValid(object value) {
DataContext db = new DataContext();
var userWithTheSameEmail = db.Users.SingleOrDefault(
u => u.Email == (string)value);
return userWithTheSameEmail == null;
}
}
// Usage
[UniqueEmail(ErrorMessage="This e-mail is already registered")]
public string Email { get; set; }
वहाँ दो समस्याएं हैं क्या मिल गया है।
यह सिर्फ एक UniqueAttribute वर्ग, ई मेल के लिए नहीं अलग वर्ग, उपयोगकर्ता नाम आदि मैं ऐसा कैसे कर सकते हैं के लिए अच्छा हो सकता है?
नया डेटा संदर्भ हर बार आपको एक विशेषता को सत्यापित करने की आवश्यकता होती है।
समाधान
तो अंत में मैं मेज पर एक अद्वितीय बाधा बना लिया है और अब मैं सिर्फ उपयोगकर्ता भंडार में SqlException अवरोधन करने की है। पूरी तरह से काम करता है और पूरी तालिका में एक ही नोड की खोज करने से शायद अधिक कुशल है। धन्यवाद!
रेल बनाम एएसपी.नेट एमवीसी संतरे से सेब की तुलना करना है, वे समान नहीं हैं। एएसपी.नेट एमवीसी में औपचारिक डेटा दृढ़ता परत नहीं है, आपको कई लोगों में से एक चुनना है, और – TFD
@TFD के साथ संघर्ष करना है, यह एक अच्छा बिंदु है। मैं मानता हूं, कोई डेटा परत नहीं है, इसलिए डेटाकॉन्टेक्स्ट को कहीं भी संग्रहीत किया जाना चाहिए, यही मेरा सवाल है। – Alex
1] डिफ़ॉल्ट रूप से, संपत्ति का नाम जिस पर विशेषता लागू होती है उसे क्वेरी विधि को क्वेरी-स्ट्रिंग पैरामीटर के रूप में भेजा जाता है। – swapneel