Actualizarea poate fi nul DateTime domeniu ca nul rezultate în mod implicit valoare DateTime (0001-01-01 00:00:00.0000000)

0

Problema

Eu sunt, folosind ASP.NET Sabloane MVC (nu Core) șablon în proiectul meu, care utilizează EF6 ca ORM. Baza de date este SQL Server Express.

Aici mi-e entitate obiect (ignorarea non-legate de proprietăți):

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

Când am crea un Activ nou, acest domeniu în mod corespunzător creat ca NULL. Deci, totul funcționează ca finalitate la început. Dar când am încerca să actualizeze un obiect cu un simplu apel de service, aceasta șuruburi.

Aici este metoda în aplicare clasa de serviciu:

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

Acest lucru ar trebui să reseta acest domeniu la null. Am încercat, de asemenea, asset.LastControlTime = null;. Dar în cele din urmă a scris "0001-01-01 00:00:00.0000000" de câmp în baza de date. Am o mulțime de locuri în codul de control pentru o valoare nulă, deci acum am avut de a schimba tone de fișiere vechi sau trebuie să găsesc o modalitate de a reseta acel câmp să pur și simplu NULĂ.

Am verificat întrebări similare aici, dar nu pot găsi un răspuns. Toate acestea spune despre null DateTime, pe care o am deja. În SQL server schema de masă, Tip de Date este datetime2(7), deci cred că e corectă. Oh, și ștergerea de Date de adnotare, de asemenea, nu se schimba nimic.

Deci ce am pierdut pe aici? Ce ar trebui să verificați pentru a găsi problema?

1

Cel mai bun răspuns

2

Cred că dacă toate altceva nu reușește, puteți simplifica cele mai multe dintre codul de re-punere în aplicare a proprietății:

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;
        }
    }
}

Nu prea taie la inima problemei, dar va lasa de progres, fără a fi nevoie să schimbi toate == null și .HasValue de-a lungul întregului program.

2021-11-23 11:44:25

Ea a lucrat! Deci, se pare că problema se află undeva între Depozit și ORM cod șabloane, de conversie de valoare nulă la minim datetime. Nu știu ce este, dar sunt prea ocupat să aibă grijă acum. Deci, vă mulțumesc foarte mult pentru această soluție simplă.
Emre Can Serteli

În alte limbi

Această pagină este în alte limbi

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