1. ホーム
  2. c#

[解決済み] System.ComponentModelのDefault Value AttrbuteでDateTimeプロパティのデフォルト値をDateTime.Nowに設定する。

2022-08-26 18:26:23

質問

System.ComponentModel DefaultValue 属性を使用して、DateTime プロパティのデフォルト値を指定する方法をご存知の方はいらっしゃいませんか?

例えば、私はこれを試しています。

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

そして、その値が定数式であることを期待します。

これは、ASP.NET Dynamic Dataで使用する場合のコンテキストです。 DateCreated カラムを scaffold せず、それが存在しない場合は単に DateTime.Now を提供します。 私は、データ層としてEntity Frameworkを使用しています。

乾杯。

アンドリュー

どのように解決するのですか?

属性はコンパイル時に生成されるメタ情報に過ぎないので、これを属性で行うことはできません。必要ならコンストラクタにコードを追加して日付を初期化するか、トリガーを作成してデータベースで欠落した値を処理するか、バッキングフィールドが初期化されていない場合はDateTime.Nowを返すようにゲッターを実装すればよいでしょう。

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

   set { this.dateCreated = value; }
}

private DateTime? dateCreated = null;