Entity framework: StoreGeneratedPattern=“Computed” property

后端 未结 1 1358
闹比i
闹比i 2020-12-03 14:24

I have a DateTime property. I need this property\'s default value to be DateTime.Now. And then I found out that you can specify an attribute

相关标签:
1条回答
  • 2020-12-03 15:09

    Setting this property to Computed is telling EF that you cannot set the value directly. How could you? This property exists for the sake of computed columns, which by definition are not saved back to the database.

    Unfortunately, EF's "Default Value" property can only be set to values known at compile-time, and so not DateTime.Now

    This link provides a decent workaround:

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


    You can also handle the SavingChanges event on your context, and add default values there, but that only happens when you actually call SaveChanges(), not when the object is created.

        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
                }
        }
    
    0 讨论(0)
提交回复
热议问题