12

DateTime özelliğim var. Bu özelliğin varsayılan değerine DateTime.Now olmalıdır. Sonra, StoreGeneratedPattern="Computed" özniteliğini belirtebileceğinizi ve SQL'de (getdate()) olarak ayarlayabileceğinizi öğrendim. Bu başarılı bir şekilde çalışır. Ama bu özelliği kod olarak değiştiremiyorum. Bazen bu özelliği herhangi bir DateTime değerine değiştirmem gerekiyor. Ama benim değişikliklerim kaydedilmedi.Varlık çerçevesi: StoreGeneratedPattern = "Computed" özelliği

cevap

14

Bu özelliğin Ayarlanması, EF'ye 'un değerini doğrudan ayarlayamayacağını bildirir. Nasıl yapabildin? Bu özellik, tanım gereği veritabanına geri kaydedilmeyen hesaplanmış sütunlar için vardır. Maalesef

, EF 'in "Varsayılan Değer" özelliği yalnızca derleme zamanında bilinen değerlere ayarlanabilir ve böylece değil DateTime.Now

Bu bağlantı iyi bir geçici çözüm sağlar yapabilirsiniz:

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


SavingChanges olayını da içeriğinizle işleyebilir ve orada varsayılan değerler ekleyebilirsiniz, ancak bu yalnızca nesne oluşturulduğunda değil, yalnızca SaveChanges() numaralı telefonu aradığınızda gerçekleşir.

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 
      } 
    }