Aktualizácia nullable DateTime oblasti ako null výsledky v predvolenom DateTime hodnotu (0001-01-01 00:00:00.0000000)

0

Otázka

Ja používam ASP.NET Štandardný MVC (nie Core) šablóny do môjho projektu, ktorý používa EF6 ako ORM. Databáza SQL Server Express.

Tu je môj subjekt, objekt (ignorovanie non-súvisiace vlastnosti):

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

Keď som sa vytvoriť nový Majetok, toto pole vhodne vytvorený ako NULL. Takže, všetko funguje ako intented na prvom mieste. Ale keď sa snažím aktualizovať objekt s jednoduchým služby hovor, to skrutky hore.

Tu je postup pri uplatňovaní služby triedy:

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

To by malo obnoviť, že pole na hodnotu null. Tiež som sa snažil asset.LastControlTime = null;. Ale na konci je napísané: "0001-01-01 00:00:00.0000000" do tohto poľa v databáze. Mám veľa miesta v kóde, že som kontrolu na hodnotu null tak teraz som musel meniť ton starých súborov alebo musím nájsť nejaký spôsob, ako obnoviť tejto oblasti jednoducho NULL.

Overil som si podobné otázky tu ale nemôže nájsť odpoveď. Všetky z nich rozpráva o nullable DateTime, ktoré už mám. V SQL server tabuľky, schémy, je Typ Údajov datetime2(7)tak , myslím, že to je príliš správne. Oh, a ktorým Typ anotácia tiež nechcel nič meniť.

Tak čo mám chýba tu? Čo by som mal skontrolovať nájsť problém?

1

Najlepšiu odpoveď

2

Myslím, že ak všetko ostatné zlyhá, môžete zjednodušiť väčšina kód re-implementácia vlastnosť:

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 nie je naozaj rezané na srdci problém, ale bude vám pokrok bez toho, aby museli zmeniť všetky vaše == null a .HasValue počas celého programu.

2021-11-23 11:44:25

Fungovalo to! Takže zdá sa, že problém leží niekde medzi Úloţiska a ORM štandardný kód, prevod null hodnotu minimálne datetime. Neviem, čo to je, ale ja som príliš zaneprázdnený starostlivosťou práve teraz. Takže, veľmi vám ďakujem za to jednoduché riešenie.
Emre Can Serteli

V iných jazykoch

Táto stránka je v iných jazykoch

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