EF6 Oracle时间戳和日期
我开始使用EntityFramework 6和Oracle(客户端12.x)。 我有几个包含DATE列和TIMESTAMP列的表。
所有由EF6生成的查询都将.NET DateTime类型转换为TIMESTAMP。 所以查询性能很差。
我试图为DATETIME列添加精度为0,但在生成的查询中没有任何更改。
Property(_ => _.MyDate).HasColumnName("DATE_COLUMN").HasPrecision(0);
如何在我的代码中指定通过TO_DATE函数而不是TO_TIMESTAMP函数来转换我的where子句?
我遇到过与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();
}
所以我可以强制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的模式名称。
如果你需要更多的细节,我已经用一个示例项目写了一篇关于此的博客文章。
链接地址: http://www.djcxy.com/p/36945.html上一篇: EF6 Oracle TimeStamp & Date
下一篇: Oracle Time Difference between SYSDATE and Date From Column