我遇到过与DATE Oracle type和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();
}
所以我可以强制实体框架使用DATE类型的条件:
var measurement =
context.Measurements
.Where(m => m.MeasuredAt ==
PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
.FirstOrDefault();
请小心使用大写字母作为函数名称和sch如果使用Oracle,则使用CodeFirstFunctions的ema名称。
如果您需要更多的细节我已经写了一个blog post关于这个与一个示例项目。
您是否试过单独比较实际日期值? var calendar = _repository.Query(c => c.CALNDR_DATE.Year == calendardate.Year && c.CALNDR_DATE.Month == calendardate.Month && c.CALNDR_DATE.Day == calendardate.Day).FirstOrDefault(); –
pforsthoff