Aktualizacja pola daty i czasu, które można wartość null null prowadzi do wartości daty i czasu (domyślnie 0001-01-01 00:00:00.0000000)

0

Pytanie

Używam ASP.NET Stereotypowy wzorzec MVC (nie głównym) w moim projekcie, który wykorzystuje EF6 jako ORM. Baza danych SQL Server Express.

Oto mój obiekt encji (pomijając niepowiązanych właściwości):

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

Gdy tworzę nowy zasób, to pole jest tworzony jako PUSTE. Tak więc, najpierw wszystko działa tak jak powinno. Ale gdy próbuję zaktualizować obiekt prostym wywołaniem usługi, to się psuje.

Oto metoda w klasie usługi aplikacji:

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

To powinno zresetować wartość tego pola do zera. Ja też próbowałem asset.LastControlTime = null;. Ale w końcu w tym polu bazy danych jest napisane "0001-01-01 00:00:00.0000000". Mam wiele miejsc w kodzie, które kontroluję do wartości zerowej, więc teraz musiałem zmienić mnóstwo starych plików, lub muszę znaleźć jakiś sposób, aby przywrócić to pole tylko do ZERA.

Sprawdziłem podobne pytania tutaj, ale nie mogę znaleźć odpowiedzi. Wszystkie one opowiadają o zerowym czasu daty, które już mam. W schemacie tabeli programu SQL server Typ danych jest datetime2(7)tak , że myślę, że to też jest poprawnie. O, i usuwanie adnotacji typu danych również nic się nie zmieniło.

Czego mi tu brakuje? Co powinienem sprawdzić, żeby znaleźć problem?

1

Najlepsza odpowiedź

2

Myślę, że jeśli wszystko inne się nie uda, można uprościć większość swojego kodu, ponowne realizując właściwość:

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 właściwie nie dotyka sedna problemu, ale pozwoli ci się rozwijać bez potrzeby modyfikowania wszystkie twoje == null .Ma znaczenie w całym programie.

2021-11-23 11:44:25

To zadziałało! Tak więc, wydaje się, że problem leży gdzieś pomiędzy repozytorium i stereotypowe kodem ORM, преобразующим zerowa wartość minimalna wartość daty i czasu. Nie wiem, co to jest, ale teraz jestem zbyt zajęty, aby się martwić. Tak więc, dziękuję ci za to proste rozwiązanie.
Emre Can Serteli

W innych językach

Ta strona jest w innych językach

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