sql >> Base de Datos >  >> RDS >> Oracle

EF6 Marca de tiempo y fecha de Oracle

Tuve un problema similar con el tipo DATE Oracle y EF6.1. Mi solución fue usar Funciones CodeFirst biblioteca (disponible solo para EF6.1 y versiones posteriores) y especifique primero una función de conversión en 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;

Y luego en mi DbContext:

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

Entonces puedo obligar a Entity Framework a usar el tipo DATE en una condición where:

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

Tenga cuidado de usar letras mayúsculas para el nombre de la función y para el nombre del esquema con CodeFirstFunctions si usa Oracle.

Si necesita más detalles, he escrito un entrada de blog sobre esto con un proyecto de ejemplo.