Mise à jour d'un nullable champ DateTime comme résultats nuls en défaut valeur de type DateTime (0001-01-01 00:00:00.0000000)

0

La question

Je suis à l'aide d'ASP.NET Standard MVC (pas de Base) modèle dans mon projet, qui utilise EF6 comme ORM. Base de données SQL Server Express.

Voici mon entité de l'objet (en ignorant non liées à des propriétés):

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

Lorsque je crée un nouvel Actif, ce champ de manière appropriée créé comme NULL. Donc, tout fonctionne comme destiné au premier abord. Mais quand j'essaie de mettre à jour un objet avec un simple appel de service, il vis.

Voici la méthode dans l'application de service de classe:

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

Cela devrait réinitialiser le champ à la valeur null. J'ai aussi essayé asset.LastControlTime = null;. Mais à la fin il est écrit "0001-01-01 00:00:00.0000000" pour ce champ dans la base de données. J'ai beaucoup d'endroits dans le code que je maîtrise pour une valeur null alors maintenant, j'ai dû changer de tonnes de vieux fichiers ou je doit trouver un moyen de réinitialiser le champ de simplement NULLE.

J'ai vérifié les mêmes questions ici, mais impossible de trouver une réponse. Tous d'entre eux raconte nullable DateTime, dont j'ai déjà. Dans SQL server schéma de la table, Type de Données est datetime2(7), donc je suppose que c'est correct aussi. Oh et en supprimant le Type de données d'annotation n'ai pas changer quoi que ce soit.

Donc ce qui me manque ici? Que dois-je vérifier pour trouver le problème?

1

La meilleure réponse

2

Je suppose que si tout le reste échoue, vous pouvez simplifier le plus de votre code en re-mise en œuvre de la propriété:

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

Il n'a pas vraiment d'aller au cœur du problème, mais vous permettra de progresser sans avoir à changer l'ensemble de vos == null et .HasValue tout au long du programme.

2021-11-23 11:44:25

Il a travaillé! Il semble donc que le problème se situe quelque part entre le Référentiel et l'ORM code standard, de la conversion de la valeur null au minimum de type datetime. Je ne sais pas ce que c'est mais je suis trop occupé pour soins de la droite maintenant. Alors, je vous remercie beaucoup pour cette solution simple.
Emre Can Serteli

Dans d'autres langues

Cette page est dans d'autres langues

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