实体框架Oracle时间戳

编程入门 行业动态 更新时间:2024-10-25 21:15:23
本文介绍了实体框架Oracle时间戳的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我们有一个T_SC_SERVICE表,其中的INSTANCE_ID列在Oracle中是Timestamp(6)类型.

We have T_SC_SERVICE table with a INSTANCE_ID column which is type Timestamp(6) in Oracle.

我正在使用.NET Framework 4.5,Entity Framework 6和DB First方法.

I'm using .NET Framework 4.5, Entity Framework 6 and DB first approaches.

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

I'm trying to Add and Select item from this table with using LINQ.

插入LINQ,如下所示:

Service newItem = new Service() { InstanceId = DateTime.Now, }; this.ObjectSet.Add(newItem); this.SaveChanges();

该LINQ生成SQL如下.如您所见,INSTANCE_ID参数按照预期的日期时间发送.

That LINQ generates SQL as below. As you can see INSTANCE_ID parameter is send as a DateTime as expected.

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是作为日期而不是DateTime发送的.因此它总是返回Null.这是相同的实体对象和相同的模型.我不知道为什么这个LINQ发送DateTime作为Date类型而不是DateTime.

That LINQ generates SQL as below. As you can see Instance_ID is send as a Date not DateTime. So it always return Null. This is the same entity object and same model. I could not figure out why this LINQ is sending DateTime as type of Date instead of 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

我正在使用这些软件包:

I'm using these packages:

<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 ).您可以在以下位置查看我的问题: community.oracle/thread/4288922 ,我们需要等待Oracle.ManagedDataAccess.EntityFramework的新版本被修复.

I reached to Oracle team and they accepted that it is a bug (Bug id : 30294734). You can check my issue on : community.oracle/thread/4288922, we need to wait for the new version of Oracle.ManagedDataAccess.EntityFramework it will be fixed.

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

However, as a workaround we used SQLRawQuery, it worked for us.

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();

更多推荐

实体框架Oracle时间戳

本文发布于:2023-11-22 19:10:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1618653.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实体   框架   时间   Oracle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!