Mysql
 sql >> Base de données >  >> RDS >> Mysql

Gestion de MySQL Zero Date avec EF Core

Les gens pourraient dire que cela convient mieux comme commentaire, mais fondamentalement, c'est trop long pour cela.

Et :

Vous devrez m'aider un peu car je n'ai pas de système de travail à portée de main, donc je le fais du haut de ma tête. (et je suis un peu pressé)

Tout d'abord, commencez avec une propriété non mappée :

[NotMapped]
public DateTime ExpiryDate { get; set; }

Cette propriété n'est pas cartographiée. Cela peut entraîner des erreurs concernant la base de données qui ne correspond pas au modèle, mais nous pouvons surmonter cela. Cette propriété ne sera pas remplie automatiquement lors de l'interrogation des données. Nous avons donc besoin d'un moyen de gérer cela nous-mêmes.

Par exemple, (qui est un mauvais exemple car nous avons besoin du contexte dans l'entité quelque part ):

[NotMapped]
public DateTime? ExpiryDate 
{
    get
    {
         //of course you'll need some caching here
         var s = context.Database.SqlQuery<string>("query to select datetime as string");
         //additional logic to determine validity:
         if (s == "0000-00-00")
             return null;
         //else:
         //do the conversion
    }
 }

La question de base ici; jusqu'où voulez-vous aller pour soutenir cela dans le cadre EF ? Avez-vous seulement besoin de le lire, ou d'écrire également, en utilisant le suivi des modifications d'EF, etc. ?

Il existe d'autres possibilités, par exemple, d'effectuer une CAST à nvarchar dans le SQL lui-même pour obtenir les données et les traiter ultérieurement.

Peut-être le ModelBuilder expose quelques options supplémentaires.