ब्रीज़ पर देखकर मैं अपनी कई विशेषताओं से प्रभावित हूं।ब्रीज़ सर्वर-साइड प्रमाणीकरण
मुझे यह समझने में परेशानी हो रही है कि क्लाइंट को सर्वर-साइड DbContext सत्यापन त्रुटियों को वापस कैसे प्राप्त करें। मैं समझता हूं कि ब्रीज़ में डिफ़ॉल्ट सत्यापनकर्ता हैं जो "आवश्यक" जैसे कुछ विशेषताओं पर प्रतिक्रिया करते हैं, लेकिन अन्य सभी विशेषताओं के बारे में क्या? मैं ब्रीज़ के लिए एक कस्टम जावास्क्रिप्ट सत्यापनकर्ता लिख सकता हूं जो क्लाइंट साइड पर जांच करेगा, लेकिन मुझे यह सुनिश्चित करने के लिए भी जांच करनी होगी कि इकाई सर्वर-साइड पर मान्य है।
उदाहरण के लिए: एप्लिकेशन को "व्यक्ति" के पास एक वैध ईमेल पता होना आवश्यक है। एक दुर्भावनापूर्ण उपयोगकर्ता साथ आता है और क्लाइंट के पीछे एक ईमेल पता प्राप्त करता है और उस सर्वर के साथ सर्वर पर पोस्ट करता है जो "ईमेल एड्रेस" सत्यापनकर्ता को पास नहीं करेगा। अब तक ब्रीज़ के साथ मेरा अनुभव यह है कि ईमेल पता सहेज जाएगा और किसी भी डीबीकॉन्टेक्स्ट/इकाई फ्रेमवर्क त्रुटियों को बबल नहीं करेगा।
नीचे दिए गए मॉडल को मानते हुए, किसी भी इकाई सत्यापन त्रुटियों को प्राप्त करने का सबसे अच्छा तरीका क्या होगा?
public class PeopleContext : DbContext
{
public PeopleContext()
: base("name=ConnectionString"){ }
public DbSet<Person> People { get; set; }
}
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[EmailAddress]
[Required]
public string Email { get; set; }
}
अद्यतन 1:
यहाँ कुछ निर्देशों के मुद्दा यह है कि मैं का सामना कर रहा हूँ फिर से बनाने हैं।
- "तोदो" नमूना बनाने के लिए निर्देशों का पालन करें (http://www.breezejs.com/documentation/start-nuget)
को BreezeSampleTodoItem.cs फ़ाइल
[AttributeUsage(AttributeTargets.Property)] public class CustomValidator : ValidationAttribute { public override Boolean IsValid(Object value) { string val = (string)value; if (!string.IsNullOrEmpty(val) && val == "Error") { ErrorMessage = "{0} equal the word 'Error'"; return false; } return true; } }
नए कस्टम के साथ डेकोरेट विवरण क्षेत्र में एक नए कस्टम सत्यापनकर्ता जोड़े सत्यापनकर्ता:
[CustomValidator] public string Description { get; set; }
उचित उपयोग जोड़ें बेशक ("सिस्टम" और "System.ComponentModel.DataAnnotations")।
- प्रोजेक्ट चलाएं।
- विवरण फ़ील्ड में से एक में "त्रुटि" टाइप करें और सहेजें।
यह वह जगह है जहां मैं हवा के माध्यम से एक त्रुटि देखने की उम्मीद करता हूं, या यहां तक कि "डीबीइन्टिटी वैलिडेशन एक्सेप्शन" को एंटीटी फ्रेमवर्क से फेंक दिया जाएगा। मैंने एक ही परिणाम के साथ 2 अलग-अलग कंप्यूटरों पर कोशिश की है। इकाई डेटाबेस में सहेजी जाती है जैसे कि कोई त्रुटि नहीं थी। वास्तव में यदि आप कस्टम सत्यापनकर्ता की IsValid विधि के अंदर कहीं भी ब्रेक पॉइंट डालते हैं तो आप देखेंगे कि इसे भी नहीं कहा जा रहा है।
हाय वार्ड, उत्तर के लिए धन्यवाद, और भयानक परियोजना! मैंने अपने प्रश्न को संपादित करने के लिए एक उदाहरण प्रदान किया है कि मैं जिस समस्या का सामना कर रहा हूं उसे दोहराना है। जिस समस्या में मैंने भाग लिया है वह यह है कि EFContextProvider.SaveChanges (saveBundle) विधि का उपयोग करते समय डेटा एनोटेशन का मूल्यांकन नहीं किया जा रहा है। मैंने ब्रीज़ के लिए सोर्स कोड खींचा और यदि मैं EFContextProvider के लिए कोड बदलता हूं। SaveChangesCore विधि का उपयोग ((डीबीकॉन्टेक्स्ट) (ऑब्जेक्ट) संदर्भ) ऑब्जेक्ट कॉन्टेक्स्ट .वेव चेंज() के बजाय .SaveChanges(), तो एनोटेशन का मूल्यांकन सही ढंग से किया जाता है। लेकिन मैं स्रोत को संशोधित नहीं करता। – adamlj
एक और नोट, मैंने पहले सेव विधियों की जांच की। मेरी चिंता यह है कि मैं केवल एक बूल वापस कर सकता हूं। सत्यापन त्रुटियों के लिए उपयोगकर्ता को एक त्रुटि संदेश वापस पाने का कोई तरीका होना चाहिए। – adamlj
आपको एक अपवाद फेंकना चाहिए जिसमें विफलता की व्याख्या शामिल है, उदाहरण के लिए, 'नया अमान्यऑपरेशन अपवाद ("अज्ञात प्रकार की इकाई को सहेज नहीं सकता") फेंकना;' झूठ लौटने से केवल उस इकाई को सहेजने के दौरान कॉन्टेक्स्टप्रोवाइडर को छोड़ दिया जाता है; यह सहेजना समाप्त नहीं करता है! "[सर्वर-साइड इंटरसेप्शन] देखें (http: //www.breezejs।कॉम/प्रलेखन/सर्वर-साइड-अवरोध) "दस्तावेज़ों में पृष्ठ – Ward