Tôi đã gặp sự cố tương tự với loại DATE Oracle và EF6.1. Cách giải quyết của tôi là sử dụng CodeFirstFunctions thư viện (chỉ có sẵn cho EF6.1 trở lên) và chỉ định một hàm chuyển đổi trước trong 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;
Và sau đó trong DbContext của tôi:
[DbFunction("CodeFirstDatabaseSchema", "TO_DATE_LOCAL")]
public static DateTime ToDateLocal(string dateTimeToConvert, string convertFormat)
{
// no need to provide an implementation
throw new NotSupportedException();
}
Vì vậy, tôi có thể buộc Entity Framework sử dụng loại DATE trong điều kiện where:
var measurement =
context.Measurements
.Where(m => m.MeasuredAt ==
PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
.FirstOrDefault();
Hãy cẩn thận sử dụng các chữ cái viết hoa cho tên hàm và cho tên lược đồ với CodeFirstFunctions nếu bạn sử dụng Oracle.
Nếu bạn cần thêm chi tiết, tôi đã viết bài đăng trên blog về điều này với một dự án mẫu.