sql >> Databasteknik >  >> RDS >> Oracle

EF6 Oracle tidsstämpel och datum

Jag har haft ett liknande problem med DATE Oracle-typ och EF6.1. Min lösning var att använda CodeFirstFunctions bibliotek (endast tillgängligt för EF6.1 och senare) och ange en konverteringsfunktion först 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;

Och senare 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å jag kan tvinga Entity Framework att använda DATE-typ i ett where-villkor:

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

Var noga med att använda stora bokstäver för funktionsnamnet och för schemanamnet med CodeFirstFunctions om du använder Oracle.

Om du behöver mer information har jag skrivit en blogginlägg om detta med ett exempelprojekt.




  1. Analysera SQL via Oracles JDBC-drivrutin

  2. Hur slår man på PostgreSQL VERBOSITY i django db-anslutning?

  3. Konvertera negativa färgnummer till HEX eller RGB

  4. Fel vid hämtning ur sekvens som returnerar tabell från Oracle-funktion i C# där funktionen använder dblink till SQL Server