我有一个DateTime
属性。我需要此属性的默认值为DateTime.Now
。然后我发现您可以指定一个属性StoreGeneratedPattern="Computed"
并在SQL中将其设置为(getdate())
。这成功了。但我无法在代码中更改此属性。有时我需要将此属性更改为任何DateTime值。但是我的更改没有保存。
答案 0 :(得分:14)
将此属性设置为Computed告诉EF您无法直接设置该值。你怎么能?此属性存在于计算列中,根据定义,列不会保存回数据库。
不幸的是,EF的“默认值”属性只能设置为编译时已知的值,因此不能DateTime.Now
此链接提供了一个不错的解决方法:
您还可以在上下文中处理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
}
}