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.