將DateTime屬性的默認值設置為System.ComponentModel內的DateTime.Now默認值Attrbute

asp.net asp.net-core-2.1 c# ef-core-2.1 entity-framework

有沒有人知道如何使用System.ComponentModel DefaultValue屬性為DateTime屬性指定默認值?

例如我試試這個:

[DefaultValue(typeof(DateTime),DateTime.Now.ToString("yyyy-MM-dd"))]
public DateTime DateCreated { get; set; }

並且它期望值是一個恆定的表達式。

這是在使用ASP.NET動態數據的上下文中。我不想構建DateCreated列,但只是提供DateTime.Now,如果它不存在。我使用實體框架作為我的數據層

乾杯,

安德魯

一般承認的答案

您不能使用屬性執行此操作,因為它們只是在編譯時生成的元信息。只需向構造函數添加代碼以在需要時初始化日期,創建觸發器並處理數據庫中的缺失值,或者以返回DateTime.Now的方式實現getter(如果未初始化支持字段)。

public DateTime DateCreated
{
   get
   {
      return this.dateCreated.HasValue
         ? this.dateCreated.Value
         : DateTime.Now;
   }

   set { this.dateCreated = value; }
}

private DateTime? dateCreated = null;

熱門答案

我沒有理由認為不應該通過屬性做到這一點。它可能在微軟的積壓中。誰知道。

我發現的最佳解決方案是在代碼首次遷移中使用defaultValueSql參數。

CreateTable(
    "dbo.SomeTable",
    c => new
        {
            TheDateField = c.DateTime(defaultValueSql: "GETDATE()")
        });

我不喜歡在實體類構造函數中設置它的常用參考解決方案,因為如果除了Entity Framework之外的任何內容在該表中粘貼記錄,則日期字段將不會獲得默認值。使用觸發器來處理這種情況的想法對我來說似乎不對。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因