Jeg har haft et lignende problem med DATE Oracle-typen og EF6.1. Min løsning var at bruge CodeFirstFunctions bibliotek (kun tilgængelig for EF6.1 og nyere) og angiv først en konverteringsfunktion 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;
Og senere 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å jeg kan tvinge Entity Framework til at bruge DATE-typen i en where-tilstand:
var measurement =
context.Measurements
.Where(m => m.MeasuredAt ==
PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
.FirstOrDefault();
Vær omhyggelig med at bruge store bogstaver til funktionsnavnet og til skemanavnet med CodeFirstFunctions, hvis du bruger Oracle.
Hvis du har brug for flere detaljer, har jeg skrevet en blogindlæg om dette med et eksempelprojekt.