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
12
A
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ğilDateTime.Now
Bu bağlantı iyi bir geçici çözüm sağlar yapabilirsiniz:
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
}
}