System.ComponentModel内でDateTimeプロパティのデフォルト値をDateTime.Nowに設定します。デフォルト値

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を指定してください(存在しない場合)。データ層として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;

人気のある回答

私が思いつくことができる理由はありません、それは属性を通してすることが可能であるべきではないです。それはマイクロソフトのバックログにあるかもしれません。知るか。

私が見つけた最良の解決策は、コードの最初の移行でdefaultValueSqlパラメータを使用することです。

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

Entity Framework以外のものがそのテーブルにレコードを貼り付けている場合、dateフィールドはデフォルト値を取得できないため、エンティティクラスコンストラクターで設定するという、よく参照される解決策は好きではありません。そして、そのケースを処理するためにトリガーを使用するという考えは、私には間違っているようです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ