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にwhere条件でDATE型を使用するように強制できます:
var measurement =
context.Measurements
.Where(m => m.MeasuredAt ==
PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
.FirstOrDefault();
Oracleを使用する場合は、関数名およびCodeFirstFunctionsのスキーマ名に大文字を使用するように注意してください。
詳細が必要な場合は、ブログ投稿 これについては、サンプルプロジェクトを使用してください。