Mysql
 sql >> Database >  >> RDS >> Mysql

Gestire MySQL Zero Date con EF Core

Le persone potrebbero obiettare che questo è più adatto come commento, ma in pratica è troppo forte.

E:

Dovrai aiutarmi un po' dal momento che non ho un sistema funzionante a portata di mano, quindi lo sto facendo dall'alto della mia testa. (e ho un po' di fretta)

Innanzitutto, inizia con una proprietà non mappata:

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

Questa proprietà non è mappata. Potrebbe portare ad alcuni errori relativi al database che non corrisponde al modello, ma possiamo superarlo. Questa proprietà non verrà compilata automaticamente durante la query dei dati. Quindi, abbiamo bisogno di un modo per affrontarlo da soli.

Ad esempio, (che è un cattivo esempio perché abbiamo bisogno del contesto nell'entità da qualche parte ):

[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 domanda di base qui; fino a che punto vuoi arrivare per supportare questo all'interno del framework EF? Hai solo bisogno di leggerlo, o anche di scrivere, usando il tracker delle modifiche di EF ecc.?

Esistono altre possibilità, ad esempio, per eseguire un CAST a nvarchar all'interno dell'SQL stesso per ottenere i dati ed elaborarli ulteriormente.

Forse il ModelBuilder espone alcune opzioni aggiuntive.