繁体   English   中英

实体框架 Oracle 时间戳

[英]Entity Framework Oracle Timestamp

我们有一个带有INSTANCE_ID列的T_SC_SERVICE表,该列是 Oracle 中的Timestamp(6)类型。

我正在使用 .NET Framework 4.5、Entity Framework 6 和 DB 优先方法。

我正在尝试使用 LINQ 从此表中添加和选择项目。

用LINQ插入如下图:

Service newItem = new Service()  
{  
    InstanceId = DateTime.Now,  
};  


this.ObjectSet.Add(newItem);  
this.SaveChanges(); 

该 LINQ 生成 SQL 如下。 如您所见, INSTANCE_ID参数按预期作为 DateTime 发送。

insert into "DGARSMART"."T_SC_SERVICE"("INSTANCE_ID")  
values (:p0)  

-- :p0: '29.08.2019 07:33:38' (Type = DateTime)  

-- Executing at 29.08.2019 07:33:38 +03:00  

-- Completed in 66 ms with result: 1  

这是我的问题:

用LINQ选择如下图:

internal Service GetServiceByInstanceId(DateTime instanceId)
{
     return this.ObjectSet.FirstOrDefault(i => i.InstanceId == instanceId);
}

该 LINQ 生成 SQL 如下。 如您所见,Instance_ID 是作为日期而不是日期时间发送的。 所以它总是返回 Null。 这是相同的实体对象和相同的模型。 我不明白为什么这个 LINQ 将 DateTime 作为 Date 类型而不是 DateTime 发送。

SELECT   
"Extent1"."INSTANCE_ID" AS "INSTANCE_ID",   
FROM "DGARSMART"."T_SC_SERVICE" "Extent1"  
WHERE (("Extent1"."INSTANCE_ID" = :p__linq__0) AND (:p__linq__0 IS NOT NULL)) AND (ROWNUM <= (1)   

-- p__linq__0: '29.08.2019 07:33:38' (Type = Date)  

-- Executing at 29.08.2019 07:34:47 +03:00  

-- Completed in 5 ms with result: OracleDataReader  

我正在使用这些软件包:

 <package id="Oracle.ManagedDataAccess" version="12.2.1100" targetFramework="net45" />

 <package id="Oracle.ManagedDataAccess.EntityFramework" version="12.2.20190115" targetFramework="net45" />

 <package id="EntityFramework" version="6.0.0" targetFramework="net45" />

我联系了 Oracle 团队,他们承认这是一个错误(错误 ID:30294734 )。 您可以在: https : Oracle.ManagedDataAccess.EntityFramework上查看我的问题,我们需要等待Oracle.ManagedDataAccess.EntityFramework的新版本它会被修复。

但是,作为一种解决方法,我们使用了SQLRawQuery ,它对我们SQLRawQuery

  var service = dbContext.Database.SqlQuery("SELECT * FROM T_SC_SERVICE WHERE INSTANCE_ID > :instanceId", new OracleParameter("instanceId", OracleDbType.TimeStamp, LastTimestamp, System.Data.ParameterDirection.Input)).FirstOrDefault(); 

编辑:

“此错误已在 ODP.NET 19.6 及更高版本中修复。” 如oracle错误线程中所述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM