![](/img/trans.png)
[英]Overriding default value in Entity Framework when StoreGeneratedPattern = Computed
[英]Entity framework: StoreGeneratedPattern=“Computed” property
我有一個DateTime
屬性。 我需要此屬性的默認值為DateTime.Now
。 然后我發現你可以指定一個屬性StoreGeneratedPattern="Computed"
並在SQL中將其設置為(getdate())
。 這成功了。 但我無法在代碼中更改此屬性。 有時我需要將此屬性更改為任何DateTime值。 但是我的更改沒有保存。
將此屬性設置為Computed會告訴EF您無法直接設置該值。 你怎么能? 此屬性存在於計算列中,根據定義,列不會保存回數據庫。
不幸的是,EF的“默認值”屬性只能設置為編譯時已知的值,因此不能設置為DateTime.Now
此鏈接提供了一個不錯的解決方法:
將DateTime屬性的默認值設置為System.ComponentModel內的DateTime.Now默認值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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.