oracle - "TIMESTAMP WITH TIME ZONE"<--> DateTImeOffset 映射不会在 INSERT 命令上传递区域部分( Entity Framework + Oracle)

标签 oracle entity-framework timestamp datetimeoffset zone

我使用 EF(EDMX 模型 - 首先是 DB)将“TIMESTAMP WITH TIME ZONE”映射到 DateTimeOffset。当我将 DateTimeOffset 提交给 Oracle 时,区域部分保存不正确。

因此,如果使用模型,例如,插入值 29/02/2012 10:10:10 +04:00 ,Oracle中实际存储的值为29/02/2012 10:10:10 +02:00 (假设 +02:00 是本地区域)
请注意,查询数据时映射工作得很好。只有 INSERT(通过 ObjectContext.SaveChanges())被破坏...

我已经调试到“Oracle.DataAccess.dll”(使用 ILSpy :))并发现 EF 的映射代码省略了区域(“Oracle 数据提供程序”仅传递 DateTimeOffset.DateTime)。

有谁知道解决方法?

提前致谢
伊莱

顺便说一句:我正在使用 .net4、EF4、Oracle 11g、ODAC 11.2 第 4 版(11.2.0.3.0)

最佳答案

您可以尝试动态 set the Session Time Zone , “当 TIMESTAMP 值转换为 TIMESTAMP WITH 时生效
TIME ZONE 或 TIMESTAMP WITH LOCAL TIME ZONE 数据类型”。

...当然是一个可怕的黑客,还因为您不能直接通过 SQL 执行更改 session 。你必须使用类似的东西

begin DBMS_UTITLITY.EXEC_DDL_STATEMENT ('Alter Session Set TIME_ZONE = ''+04:00'''); end;

关于oracle - "TIMESTAMP WITH TIME ZONE"<--> DateTImeOffset 映射不会在 INSERT 命令上传递区域部分( Entity Framework + Oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9531335/

相关文章:

java - 如何在 JPA 条件查询中使用 Oracle 的 'connect by' 子句?

c# - 使用 ValueInjecter 将 EntityFramework POCO 复制到 DTO 而不触发延迟加载列表和属性

PHP 查找到某个日期的天数

javascript - 将时间戳转换为特定格式?

sql - Oracle - 如何在分层查询中使用连接并避免笛卡尔积

mysql - 表上的触发器如何在插入事件上工作?

sql - 甲骨文 : Swapping table names

c# - 在不更新行版本的情况下检查实体的并发性

c# - 如何在 EF Core 6 中嵌套事务?

linux - 如何在刚刚加了时间戳的脚本中指定一个文件?