sql >> Database >  >> RDS >> Mysql

Omgaan met MySQL Zero Date met EF Core

Mensen zouden kunnen beweren dat dit beter geschikt is als commentaar, maar eigenlijk is het daar te lang voor.

En:

Je zult me ​​een beetje moeten helpen aangezien ik geen werkend systeem bij de hand heb, dus ik doe dit vanuit mijn hoofd. (en ik heb een beetje haast)

Begin eerst met een niet-toegewezen eigenschap:

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

Deze eigenschap is niet in kaart gebracht. Het kan zijn dat er fouten optreden met betrekking tot de database die niet overeenkomt met het model, maar dat kunnen we verhelpen. Deze eigenschap wordt niet automatisch ingevuld bij het opvragen van de gegevens. We hebben dus een manier nodig om hier zelf mee om te gaan.

Bijvoorbeeld (wat een slecht voorbeeld is omdat we de context ergens in de entiteit nodig hebben ):

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

De basisvraag hier; hoe ver wil je gaan om dit binnen EF-kader te ondersteunen? Moet je het alleen lezen of ook schrijven met de change tracker van EF etc.?

Er zijn andere mogelijkheden om bijvoorbeeld een CAST naar nvarchar binnen de SQL zelf om de gegevens te verkrijgen en verder te verwerken.

Misschien de ModelBuilder onthult enkele extra opties.




  1. django.core.exceptions.ImproperlyConfigured:fout bij het laden van MySQLdb-module:geen module met de naam MySQLdb

  2. Python gebruiken om toegang te krijgen tot SQL met een variabele kolomnaam

  3. MySQL-verbindingsfout die ik nog nooit heb gezien

  4. Hoe DB-verzoeken onderscheppen? (MySQL)