L'aggiornamento di un nullable campo DateTime null risultati in default il valore DateTime (0001-01-01 00:00:00.0000000)

0

Domanda

Sto utilizzando ASP.NET Boilerplate MVC (non Core) modello nel mio progetto, che utilizza EF6 come ORM. Database di SQL Server Express.

Ecco il mio entità oggetto (ignorando non collegati tra di loro proprietà):

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

Quando vado a creare una nuova Attività, in questo campo, opportunamente creata come NULL. Così, tutto funziona come stabilito in un primo momento. Ma quando cerco di aggiornare un oggetto con una semplice chiamata al servizio, viti fino.

Ecco il metodo di applicazione classe di servizio:

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

Questo dovrebbe ripristinare il campo a null. Ho provato anche asset.LastControlTime = null;. Ma, alla fine, è scritto "0001-01-01 00:00:00.0000000" per il campo nel database. Ho un sacco di posti nel codice che ho il controllo per un valore null così ora ho dovuto cambiare tonnellate di vecchi file o devo trovare qualche modo per ripristinare il campo semplicemente NULLO.

Ho controllato domande simili qui ma non riesco a trovare una risposta. Tutti di loro racconta DateTime nullable, che già ho. In SQL server schema di tabella, il Tipo di Dati è datetime2(7), quindi credo che è corretta. Oh, e di eliminare il Tipo di annotazione anche non cambiare nulla.

Quindi, quello che mi manca qui? Cosa devo controllare per trovare il problema?

1

Migliore risposta

2

Suppongo che se tutto il resto fallisce, è possibile semplificare la maggior parte del codice di re-implementare la struttura:

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

In realtà non tagliare al cuore del problema, ma vi permetterà di progresso, senza dover modificare tutti i tuoi == null e .HasValue nel corso dell'intero programma.

2021-11-23 11:44:25

Ha funzionato! Così sembra che il problema si trova da qualche parte tra il Repository e ORM codice standard, di convertire il valore null al minimo datetime. Non so cosa sia ma sono troppo occupato a cura adesso. Così, la ringrazio molto per questa semplice soluzione.
Emre Can Serteli

In altre lingue

Questa pagina è in altre lingue

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