我正在使用Linq查询代表Oracle数据库的EF6上下文。我试图基于TIMESTAMP字段从表中选择行,该字段将日期时间最多存储几分之一秒。这是您可以编写的最垃圾标准的查询,但它不起作用。
data = await dbContext.MyTable.Where(x => x.Timestamp > LastTimestamp).ToArrayAsync();
此查询似乎返回表中的所有数据,而不管时间戳的值如何。当我单步执行代码并检查返回的每个实体的属性时,它们具有正确的数据,但不应该将它们作为结果集的一部分。
该实体将Timestamp属性指定为DateTime对象,这是Oracle数据类型TIMESTAMP的正确表示吗?
我认为问题在于,高分辨率时间戳最终总是比我传递的日期时间稍早,而Linq已将其截断。有没有办法解决这个问题?
一些相关问题:
Can't compare 2 dates in oracle correctly
How can I get Entity Framework with Oracle to send fractional seconds to a database in a query?
正如我指出的,我在这里遇到了同样的问题:
Entity Framework Oracle Timestamp
我写信给Oracle团队,他们承认这是一个错误。您可以在https://community.oracle.com/thread/4288922上检查我的问题,您需要等待Oracle.ManagedDataAccess.EntityFramework
的新版本得到修复。
但是,作为一种替代方法,您可以使用SQLRawQuery
,它对我们有用。
SQLRawQuery