8

यदि मॉडल-प्रथम है, तो हम मेटाडेटा स्रोत फ़ाइल संलग्न करने के लिए [MetadataType(typeof(ConceptMetadataSource))] का उपयोग करते हैं जिसमें [HiddenInput(DisplayValue = false)] या [Display(Name = "Title")] जैसी सभी डेटा एनोटेशन शामिल हैं।डेटा-फर्स्ट द्वारा स्वचालित रूप से बनाई गई इकाइयों के लिए डेटा एनोटेशन कैसे जोड़ें?

उदाहरण के लिए:

[MetadataType(typeof(ConceptMetadataSource))] 
public partial class Concept 
... 

अब, के बाद से वहाँ एक मौजूदा डेटाबेस है मैं डेटाबेस-पहले दृष्टिकोण का उपयोग कर रहा हूँ। इस बार, इकाई वर्ग स्वचालित रूप से edmx मॉडल द्वारा बनाए जाते हैं।

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated from a template. 
// 
// Manual changes to this file may cause unexpected behavior in your application. 
// Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

एक बार हम डेटाबेस में एक मेज को संशोधित के बाद से कोड पुनर्जीवित किया जाएगा, डेटा एनोटेशन हर बार इकाई वर्ग हैं सफाया हो जाएगा: प्रत्येक इकाई वर्ग की शुरुआत में, वहाँ नीचे टिप्पणी की तर्ज है पुनर्जीवित।

क्या कोई मुझे बता सकता है कि उन इकाई वर्गों को एनोटेट करने का सबसे अच्छा तरीका क्या है? धन्यवाद।

+0

आपने अभी तक कोई समाधान मिल गया है है, ब्लेज? – reidLinden

+0

हां @reidLinden, आंशिक वर्ग का उपयोग करें। – Blaise

+0

मैं इस सवाल को कैसे बंद कर सकता हूं? वह जवाब अच्छा नहीं है और मेरे पास पहले से ही एक समाधान है। – Blaise

उत्तर

6

ठीक तरह एक दृश्य के मॉडल को परिभाषित है, यहाँ जवाब है।

चाल है, ऑटो-जेनरेटेड कक्षाएं सभी आंशिक कक्षाएं हैं। संकलन प्रक्रिया सभी आंशिक कक्षाओं को एक ही नाम से जोड़ती है।

हम public partial class ConceptDbContext द्वारा उत्पन्न किया है, सब हम क्या करने की जरूरत दूसरा बनाने के लिए है public partial class Concept साथ शुरू कर दिया। यह नया आंशिक वर्ग एक अलग फ़ोल्डर में बनाया जा सकता है, लेकिन हमें इसकी नामस्थान की आवश्यकता ऑटो-जेनरेटेड आंशिक कक्षा के समान ही अपडेट की जानी चाहिए।

इस नव निर्मित आंशिक वर्ग में, हम डेटा एनोटेशन जैसे

[Required(ErrorMesssage="This Field is required")] 

के सभी प्रकार मॉडल अपडेट किया जाता है जोड़ सकते हैं या, हम भी तरह

FullName {get {return string.Format("{0} {1}", FirstName, LastName);}} 

नए गुणों में जोड़ सकते हैं डेटाबेस से फिर से, केवल ऑटो-जनरेटेड आंशिक कक्षाएं अपडेट की जाएंगी। उन नए मैन्युअल रूप से जोड़े गए आंशिक वर्ग, जिनमें हमारी एनोटेशन और अन्य कुशलताएं शामिल हैं, बरकरार रहेगी।

+0

उत्कृष्ट, धन्यवाद! – reidLinden

0

public class VMConcept 
{ 
    public Concept NewConcept {get; set;} 
} 

[MetadataType(typeof(ConceptMetadataSource))] 
public partial class Concept{} 

public class ConceptMetadataSource { 

[Required(ErrorMesssage="This Field is required")] 
public string PropertyName {get; set;} 
} 
+0

उत्तर के लिए धन्यवाद, जॉन। लेकिन कठिनाई यह है कि एक बार जब हम अवधारणा तालिका को संशोधित करते हैं, तो Concept.cs को फिर से बनाया जाएगा। और सभी एनोटेशन विशेषताओं को हटा दिया जाएगा। क्या आपने वास्तव में उनको लिखा [आवश्यक ...] edmx द्वारा उत्पन्न वर्गों के अंदर टैग? – Blaise

+0

'edmx' द्वारा कक्षाओं में नहीं, मैंने जवाब अपडेट किया है, एक दृश्य मॉडल को परिभाषित किया है जिसमें' अवधारणा 'प्रकार की संपत्ति होगी ... –

+0

दूसरा खंड अभी भी अवधारणा वर्ग में [मेटाडाटा टाइप] विशेषता जोड़ता है। क्या यह 'सार्वजनिक आंशिक वर्ग VMConcept {} 'होना चाहिए? – Blaise

12

आपको बस एक और आंशिक वर्ग बनाना है और मेटाडाटाटाइप विशेषता का उपयोग करना है। यहाँ नमूना कोड

//This is generated by EDMX 

namespace DataLayer 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Customer 
    { 
     public Customer() 
     { 
      this.CustomerAddresses = new HashSet<CustomerAddress>(); 
      this.CustomerOrders = new HashSet<CustomerOrder>(); 
     } 

     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string EmailId { get; set; } 


     public Nullable<System.DateTime> DateOfBirth { get; set; } 

     public virtual ICollection<CustomerAddress> CustomerAddresses { get; set; } 
     public virtual ICollection<CustomerOrder> CustomerOrders { get; set; } 
    } 
} 

जोड़ें कोड निम्न मैन्युअल

namespace DataLayer 
{ 
    [MetadataType(typeof(CustomerMetaData))] 
    public partial class Customer 
    { 

    } 
    public class CustomerMetaData 
    { 
     [StringLength(10, ErrorMessage = "First name must be 25 characters or less in length.")] 
     [Required(ErrorMessage = "First name is required.")] 
     public String FirstName { get; set; } 
    } 
} 
संबंधित मुद्दे