Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Umgang mit MySQL Zero Date mit EF Core

Die Leute mögen argumentieren, dass dies besser als Kommentar geeignet ist, aber im Grunde ist es zu lang dafür.

Und:

Sie müssen mir ein bisschen helfen, da ich kein funktionierendes System zur Hand habe, also mache ich das aus dem Kopf heraus. (und ich bin etwas in Eile)

Beginnen Sie zunächst mit einer nicht zugeordneten Eigenschaft:

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

Diese Eigenschaft ist nicht zugeordnet. Es kann zu einigen Fehlern führen, wenn die Datenbank nicht mit dem Modell übereinstimmt, aber wir können das überwinden. Diese Eigenschaft wird beim Abfragen der Daten nicht automatisch gefüllt. Also brauchen wir einen Weg, damit selbst umzugehen.

Zum Beispiel (was ein schlechtes Beispiel ist, weil wir den Kontext irgendwo in der Entität brauchen ):

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

Die grundlegende Frage hier; Wie weit wollen Sie gehen, um dies im Rahmen von EF zu unterstützen? Müssen Sie es nur lesen oder auch schreiben, indem Sie den Änderungstracker von EF usw. verwenden?

Es gibt andere Möglichkeiten, zum Beispiel einen CAST zu nvarchar innerhalb der SQL selbst, um die Daten zu erhalten und weiter zu verarbeiten.

Vielleicht der ModelBuilder stellt einige zusätzliche Optionen zur Verfügung.