12

मेरे पास DateTime संपत्ति है। मुझे DateTime.Now होने के लिए इस संपत्ति का डिफ़ॉल्ट मान चाहिए। और फिर मुझे पता चला कि आप एक विशेषता StoreGeneratedPattern="Computed" निर्दिष्ट कर सकते हैं और इसे SQL में (getdate()) पर सेट कर सकते हैं। यह सफलतापूर्वक काम करता है। लेकिन मैं इस संपत्ति को कोड में नहीं बदल सकता। कभी-कभी मुझे इस संपत्ति को किसी डेटटाइम मान में बदलने की आवश्यकता होती है। लेकिन मेरे परिवर्तन सहेजे नहीं गए हैं।इकाई ढांचा: StoreGeneratedPattern = "संगणित" संपत्ति

उत्तर

14

इस संपत्ति को गणना करने के लिए सेट करना ईएफ को बता रहा है कि आप सीधे मूल्य निर्धारित नहीं कर सकते हैं। आप कैसे कर सकते हैं? यह गुण गणना कॉलम के लिए मौजूद है, जिसे परिभाषा द्वारा डेटाबेस में वापस सहेजा नहीं जाता है।

दुर्भाग्य से, एफई के "डिफ़ॉल्ट मान" संपत्ति केवल संकलन समय पर जाना जाता मूल्यों के लिए सेट किया जा सकता है, और इसलिए नहीं DateTime.Now

यह लिंक एक सभ्य तरीके को प्रदान करता है:

Setting the default value of a DateTime Property to DateTime.Now inside the System.ComponentModel Default Value Attrbute


आप अपने संदर्भ पर SavingChanges ईवेंट भी संभाल सकते हैं, और वहां डिफ़ॉल्ट मान जोड़ सकते हैं, लेकिन यह तब होता है जब आप वास्तव में SaveChanges() पर कॉल करते हैं, ऑब्जेक्ट नहीं बनाया जाता है।

partial void OnContextCreated() { 
     this.SavingChanges += new EventHandler(AccrualTrackingEntities_SavingChanges); 
    } 

    void AccrualTrackingEntities_SavingChanges(object sender, EventArgs e) { 
     List<Invoice> Invoices = this.ObjectStateManager 
      .GetObjectStateEntries(System.Data.EntityState.Added | System.Data.EntityState.Modified) 
      .Select(entry => entry.Entity) 
      .OfType<Invoice>().ToList(); 

     foreach(Invoice I in Invoices) 
      if (I.EntityState == System.Data.EntityState.Added) { 
       //set default values 
      } else { 
       //?? whatever 
      } 
    } 
संबंधित मुद्दे