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.