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

EF6 Oracle TimeStamp e data

Ho riscontrato un problema simile con il tipo DATE Oracle e EF6.1. La soluzione alternativa era utilizzare CodiceFirstFunctions libreria (disponibile solo per EF6.1 e versioni successive) e specificare prima una funzione di conversione in 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;

E poi nel mio DbContext:

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

Quindi posso forzare Entity Framework a utilizzare il tipo DATE in una condizione where:

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

Prestare attenzione a utilizzare lettere maiuscole per il nome della funzione e per il nome dello schema con CodeFirstFunctions se si utilizza Oracle.

Se hai bisogno di maggiori dettagli, ho scritto un post del blog a questo proposito con un progetto di esempio.