A atualização de um nulo o campo de data / hora como nulo resulta no padrão valor de data / hora (0001-01-01 00:00:00.0000000)

0

Pergunta

Eu estou usando ASP.NET Padrão MVC (não Core) modelo no meu projeto, que usa EF6 como ORM. Banco de dados é SQL Server Express.

Aqui está o meu objeto de entidade (ignorando os não-relacionados com propriedades):

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

Quando eu criar um novo Ativo, este campo adequadamente criados como NULL. Assim, tudo funciona como destinado em primeiro lugar. Mas quando eu tento atualizar um objeto com uma simples chamada de serviço, é besteira.

Aqui é o método em que o aplicativo de serviço de classe:

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

Isso deve redefinir a campo nulo. Eu também tentei asset.LastControlTime = null;. Mas, no final, está escrito "0001-01-01 00:00:00.0000000" para que o campo no banco de dados. Eu tenho um monte de lugares no código que eu controlo para um valor nulo, então agora eu tinha que mudar de toneladas de arquivos antigos, ou eu preciso encontrar alguma maneira de redefinir a campo para simplesmente NULO.

Eu verifiquei semelhantes perguntas aqui, mas não pode encontrar uma resposta. Todos eles fala sobre anulável DateTime, que eu já tenho. No SQL server esquema de tabela de Tipo de Dados é datetime2(7), então eu acho que está correto também. Ah, e a exclusão de um Tipo de anotação também não muda nada.

Então o que estou perdendo aqui? O que devo verificar para encontrar o problema?

1

Melhor resposta

2

Acho que se tudo mais falhar, você pode simplificar a maioria de seu código de re-implementação de propriedade:

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

Isso não é realmente de cortar o coração do problema, mas deixá-lo-progresso, sem ter que mudar todos os seus == null e .HasValue durante todo o programa.

2021-11-23 11:44:25

Ele trabalhou! Assim, parece que o problema está em algum lugar entre o Repositório e ORM código padrão, convertendo o valor null para o mínimo de datetime. Eu não sei o que é, mas eu estou muito ocupado para cuidar agora. Então, muito obrigado por esta simples solução.
Emre Can Serteli

Em outros idiomas

Esta página está em outros idiomas

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