La actualización que acepta valores null campo DateTime como nulos resultados en defecto de valor de DateTime (0001-01-01 00:00:00.0000000)

0

Pregunta

Estoy usando ASP.NET texto modelo MVC (no Core) de la plantilla en mi proyecto, que utiliza EF6 como ORM. Base de datos de SQL Server Express.

Aquí está mi entidad objeto (haciendo caso omiso de que no están relacionadas con las propiedades):

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

Cuando creo un nuevo Activo, este campo adecuadamente creado como NULL. Así, todo funciona como se pretendía que fuera la primera vez. Pero cuando intento actualizar un objeto con una simple llamada de servicio, se tornillos de seguridad.

Aquí está el método de la aplicación de la clase de servicio:

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

Esto debe restablecer ese campo a null. También probé asset.LastControlTime = null;. Pero al final está escrito "0001-01-01 00:00:00.0000000" para que el campo en la base de datos. Tengo un montón de lugares en el código que tengo el control de un valor nulo así que ahora he tenido que cambiar de toneladas de archivos antiguos o tengo que encontrar alguna manera de restablecer ese campo simplemente NULO.

He comprobado preguntas similares aquí, pero no puede encontrar una respuesta. Todos ellos se habla de que aceptan valores null DateTime, que ya tengo. En SQL server esquema de la tabla, el Tipo de Datos es datetime2(7), así que supongo que es correcto también. Ah, y eliminar el Tipo de datos de anotación también no cambiar nada.

Así que lo que me estoy perdiendo aquí? ¿Qué debo revisar para encontrar el problema?

1

Mejor respuesta

2

Supongo que si todo lo demás falla, usted puede simplificar la mayoría de su código por la re-aplicación de la propiedad:

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

La verdad es que no corte al corazón del problema, pero te permitirá progresar sin tener que cambiar todos los de su == null y .HasValue a lo largo de todo el programa.

2021-11-23 11:44:25

Funcionó! Así que parece que el problema está en algún lugar entre el Repositorio y ORM código repetitivo, la conversión de nulo valor mínimo datetime. No sé qué es, pero estoy demasiado ocupado para atender a la derecha ahora. Así que, muchas gracias por esta sencilla solución.
Emre Can Serteli

En otros idiomas

Esta página está en otros idiomas

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