Aktualizace s možnou hodnotou null DateTime pole jako null výsledky ve výchozím nastavení DateTime hodnota (0001-01-01 00:00:00.0000000)

0

Otázka

Používám ASP.NET Často používaný MVC (ne Jádro) šablony v mém projektu, který používá EF6 jako ORM. Databáze SQL Server Express.

Tady je můj subjekt, objekt (ignoruje non-související vlastnosti):

public class Asset : AggregateRoot<long>
{
    [DataType(DataType.DateTime)]
    public DateTime? LastControlTime { get; set; }
}

Když jsem se vytvořit novou Aktiv, toto pole vhodně vytvořen jako NULL. Tak, vše funguje tak, jak zaměřeno na prvním místě. Ale když jsem se pokusí aktualizovat objekt s jednoduchým služby volání, to podělá.

Zde je metoda v aplikaci service třída:

public void ResetLastControlTime (EntityDto<long> input)
{
    var asset = Repository.Get(input.Id);
    asset.LastControlTime = default(DateTime?);
}

To by mělo obnovit, že pole na hodnotu null. Také jsem se snažil asset.LastControlTime = null;. Ale na konci je napsáno "0001-01-01 00:00:00.0000000" do tohoto pole v databázi. Mám spoustu místa v kódu, který jsem kontrolu na null hodnotu, takže teď jsem musel změnit tun starých souborů, nebo musím najít nějaký způsob, jak obnovit to pole prostě NULL.

Ověřil jsem si podobné otázky, ale nemůže najít odpověď. Všechny z nich vypráví o možnou hodnotou null DateTime, které už mám. V SQL server tabulka, schéma, Datový Typ je datetime2(7), takže si myslím, že je správné. Jo a odstraněním datový Typ anotace se také nic nemění.

Tak co mi tu chybí? Co mám zkontrolovat, aby najít problém?

1

Nejlepší odpověď

2

Předpokládám, že pokud všechno ostatní selže, můžete zjednodušit většina z váš kód re-prováděcí nemovitosti:

public class Asset : AggregateRoot<long>
{
    public DateTime? _LastControlTime;
    [DataType(DataType.DateTime)]
    public DateTime? LastControlTime { 
      get {
        return _LastControlTime;
      }
      set {
        if (value == DateTime.MinValue) {
          _LastControlTime = null;
        } else {
          _LastControlTime = value;
        }
    }
}

To není opravdu řez do srdce problému, ale vám umožní pokrok, aniž byste museli změnit všechny vaše == null a .HasValue v průběhu celého programu.

2021-11-23 11:44:25

To fungovalo! Takže se zdá, že problém leží někde mezi Repository a ORM často používaný kód, převod hodnoty null pro minimální datetime. Nevím, co to je, ale já jsem příliš zaneprázdněn se starat hned teď. Takže, děkuji moc za toto jednoduché řešení.
Emre Can Serteli

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................