Обновление поля даты и времени, допускающего значение null, как null приводит к значению даты и времени по умолчанию (0001-01-01 00:00:00.0000000)

0

Вопрос

Я использую ASP.NET Шаблонный шаблон MVC (не основной) в моем проекте, который использует EF6 в качестве ORM. База данных-это SQL Server Express.

Вот мой объект сущности (игнорируя несвязанные свойства):

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

Когда я создаю новый ресурс, это поле создается как ПУСТОЕ. Итак, сначала все работает так, как задумывалось. Но когда я пытаюсь обновить объект простым вызовом службы, он портится.

Вот метод в классе службы приложений:

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

Это должно сбросить значение этого поля до нуля. Я тоже пытался asset.LastControlTime = null;. Но в конце концов в этом поле базы данных написано "0001-01-01 00:00:00.0000000". У меня есть много мест в коде, которые я контролирую для нулевого значения, поэтому теперь мне пришлось изменить тонны старых файлов, или я должен найти какой-то способ сбросить это поле просто до НУЛЯ.

Я проверил аналогичные вопросы здесь, но не могу найти ответа. Все они рассказывают о нулевом времени даты, которое у меня уже есть. В схеме таблицы SQL server Тип данных является datetime2(7), так что, я думаю, это тоже правильно. О, и удаление аннотации типа данных также ничего не изменило.

Так чего же мне здесь не хватает? Что я должен проверить, чтобы найти проблему?

1

Лучший ответ

2

Я полагаю, что если все остальное не удастся, вы можете упростить большую часть своего кода, повторно реализовав свойство:

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

Это на самом деле не касается сути проблемы, но позволит вам прогрессировать без необходимости изменять все ваши == null и .Имеет значение на протяжении всей программы.

2021-11-23 11:44:25

Это сработало! Таким образом, похоже, что проблема лежит где-то между репозиторием и шаблонным кодом ORM, преобразующим нулевое значение в минимальное значение даты и времени. Я не знаю, что это такое, но я сейчас слишком занят, чтобы беспокоиться. Итак, большое вам спасибо за это простое решение.
Emre Can Serteli

На других языках

Эта страница на других языках

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