Oracle
 sql >> Datenbank >  >> RDS >> Oracle

EF6 Oracle Zeitstempel und Datum

Ich hatte ein ähnliches Problem mit dem Oracle-Typ DATE und EF6.1. Meine Problemumgehung bestand darin, CodeFirstFunctions Bibliothek (nur für EF6.1 und höher verfügbar) und geben Sie zuerst eine Konvertierungsfunktion in Oracle an:

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;

Und später in meinem DbContext:

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

So kann ich Entity Framework zwingen, den DATE-Typ in einer Where-Bedingung zu verwenden:

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

Achten Sie darauf, Großbuchstaben für den Funktionsnamen und für den Schemanamen mit CodeFirstFunctions zu verwenden, wenn Sie Oracle verwenden.

Wenn Sie weitere Details benötigen, habe ich einen Blogbeitrag dazu ein Beispielprojekt.