Festlegen des Standardwerts einer DateTime-Eigenschaft auf DateTime.Now innerhalb des System.ComponentModel-Standardwerts Attrbute

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

Frage

Weiß jemand, wie ich den Standardwert für eine DateTime-Eigenschaft mithilfe des System.ComponentModel DefaultValue-Attributs angeben kann?

Zum Beispiel versuche ich das:

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

Sie erwartet, dass der Wert ein konstanter Ausdruck ist.

Dies ist im Zusammenhang mit der Verwendung von ASP.NET Dynamic Data. Ich möchte die DateCreated-Spalte nicht einrichten, sondern einfach die DateTime.Now angeben, wenn sie nicht vorhanden ist. Ich verwende das Entity Framework als meine Datenschicht

Prost,

Andrew

Akzeptierte Antwort

Sie können dies nicht mit einem Attribut tun, da es sich hierbei lediglich um Metadaten handelt, die zur Kompilierzeit generiert werden. Fügen Sie einfach Code zum Konstruktor hinzu, um ggf. das Datum zu initialisieren, erstellen Sie einen Auslöser und behandeln Sie fehlende Werte in der Datenbank, oder implementieren Sie den Getter so, dass er DateTime.Now zurückgibt, wenn das Sicherungsfeld nicht initialisiert wird.

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

   set { this.dateCreated = value; }
}

private DateTime? dateCreated = null;

Beliebte Antwort

Es gibt keinen Grund, aus dem ich mir vorstellen kann, dass es nicht möglich sein sollte, über ein Attribut zu arbeiten. Es könnte sich im Rückstand von Microsoft befinden. Wer weiß.

Die beste Lösung, die ich gefunden habe, ist die Verwendung des Parameters defaultValueSql in der Code-Erstmigration.

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

Ich mag die häufig verwendete Referenzlösung nicht, wenn sie im Entitätsklassenkonstruktor festgelegt wird. Wenn etwas anderes als Entity Framework einen Datensatz in dieser Tabelle enthält, erhält das Datumsfeld keinen Standardwert. Und die Idee, einen Trigger für diesen Fall zu verwenden, scheint mir falsch zu sein.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum