12

我有DateTime屬性。我需要此屬性的默認值爲DateTime.Now。然後我發現你可以在SQL中指定一個屬性StoreGeneratedPattern="Computed"並將其設置爲(getdate())。這工作成功。但我無法在代碼中更改此屬性。有時我需要將此屬性更改爲任何DateTime值。但我的更改沒有保存。實體框架:StoreGeneratedPattern =「計算」屬性

回答

14

將此屬性設置爲Computed會告訴EF您不能直接設置該值。你怎麼能?此屬性爲計算列而存在,根據定義,這些列不會保存回數據庫。

不幸的是,英孚的「默認值」屬性只能設置在編譯時已知值,因此不DateTime.Now

此鏈接提供了一個不錯的解決方法:

Setting the default value of a DateTime Property to DateTime.Now inside the System.ComponentModel Default Value 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 
      } 
    }