Ik heb een soortgelijk probleem gehad met het DATE Oracle-type en EF6.1. Mijn tijdelijke oplossing was om de CodeFirstFunctions bibliotheek (alleen beschikbaar voor EF6.1 en later) en specificeer eerst een conversiefunctie 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;
En later in mijn DbContext:
[DbFunction("CodeFirstDatabaseSchema", "TO_DATE_LOCAL")]
public static DateTime ToDateLocal(string dateTimeToConvert, string convertFormat)
{
// no need to provide an implementation
throw new NotSupportedException();
}
Dus ik kan Entity Framework dwingen om het DATE-type te gebruiken in een waar-voorwaarde:
var measurement =
context.Measurements
.Where(m => m.MeasuredAt ==
PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
.FirstOrDefault();
Zorg ervoor dat u hoofdletters gebruikt voor de functienaam en voor de schemanaam met CodeFirstFunctions als u Oracle gebruikt.
Als je meer details nodig hebt, heb ik een blogpost hierover met een voorbeeldproject.