Имах подобен проблем с DATE тип Oracle и EF6.1. Моето решение беше да използвам CodeFirstFunctions библиотека (достъпна само за EF6.1 и по-нови версии) и първо задайте функция за преобразуване в 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;
И по-късно в моя DbContext:
[DbFunction("CodeFirstDatabaseSchema", "TO_DATE_LOCAL")]
public static DateTime ToDateLocal(string dateTimeToConvert, string convertFormat)
{
// no need to provide an implementation
throw new NotSupportedException();
}
Така че мога да принудя Entity Framework да използва тип DATE в условие where:
var measurement =
context.Measurements
.Where(m => m.MeasuredAt ==
PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
.FirstOrDefault();
Внимавайте да използвате главни букви за името на функцията и за името на схемата с CodeFirstFunctions, ако използвате Oracle.
Ако имате нужда от повече подробности, написах публикация в блог за това с примерен проект.