sql >> Databasteknik >  >> RDS >> Mysql

Hanterar MySQL Zero Date med EF Core

Folk kanske hävdar att det här är bättre lämpat som en kommentar, men i grund och botten är det att längta efter det.

Och:

Du måste hjälpa mig lite eftersom jag inte har ett fungerande system till hands, så jag gör detta från toppen av mitt huvud. (och jag har lite bråttom)

Börja först med en ej mappad egenskap:

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

Den här egenskapen är inte mappad. Det kan leda till att vissa fel som rör databasen inte matchar modellen, men vi kan övervinna det. Den här egenskapen kommer inte att fyllas i automatiskt när du frågar efter data. Så vi behöver ett sätt att hantera detta själva.

Till exempel (vilket är ett dåligt exempel eftersom vi behöver sammanhanget i entiteten någonstans ):

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

Grundfrågan här; hur långt vill du gå för att stödja detta inom EF-ramen? Behöver du bara läsa den, eller skriva också, med EF-ändringsspåraren etc.?

Det finns andra möjligheter, till exempel att utföra en CAST till nvarchar i själva SQL för att hämta data och vidarebearbeta den.

Kanske ModelBuilder visar några ytterligare alternativ.




  1. Hur man ändrar begränsning

  2. Automatisera Barman med Puppet:it2ndq/barman (del ett)

  3. mysql-serverportnummer

  4. Använda Laravel Raw Query med platshållare