sql >> Database teknologi >  >> RDS >> Oracle

EF6 Oracle tidsstempel og dato

Jeg har haft et lignende problem med DATE Oracle-typen og EF6.1. Min løsning var at bruge CodeFirstFunctions bibliotek (kun tilgængelig for EF6.1 og nyere) og angiv først en konverteringsfunktion i Oracle:

create or replace FUNCTION TO_DATE_LOCAL 
(
  DATETIMETOCONVERT IN VARCHAR2 
, CONVERTFORMAT IN VARCHAR2 
) RETURN DATE AS 
BEGIN
  RETURN to_date(DATETIMETOCONVERT, CONVERTFORMAT);
END TO_DATE_LOCAL;

Og senere i min DbContext:

[DbFunction("CodeFirstDatabaseSchema", "TO_DATE_LOCAL")]
public static DateTime ToDateLocal(string dateTimeToConvert, string convertFormat)
{
    // no need to provide an implementation
    throw new NotSupportedException();
}

Så jeg kan tvinge Entity Framework til at bruge DATE-typen i en where-tilstand:

var measurement = 
  context.Measurements
    .Where(m => m.MeasuredAt == 
          PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
    .FirstOrDefault();

Vær omhyggelig med at bruge store bogstaver til funktionsnavnet og til skemanavnet med CodeFirstFunctions, hvis du bruger Oracle.

Hvis du har brug for flere detaljer, har jeg skrevet en blogindlæg om dette med et eksempelprojekt.




  1. Brug af en sagserklæring med IS NULL og IS NOT NULL

  2. Opret en midlertidig tabel i MySQL med et indeks fra en udvalgt

  3. Hvordan administrerer man enorme mængder data ved hjælp af filestream, da kun lokale stier understøttes til datalagring?

  4. Tilføj automatisk bogstaver foran et automatisk stigningsfelt