我正在使用Linq查询代表Oracle数据库的EF6上下文。我试图基于TIMESTAMP字段从表中选择行,该字段将日期时间最多存储几分之一秒。这是您可以编写的最垃圾标准的查询,但是它不起作用。
data = await dbContext.MyTable.Where(x => x.Timestamp > LastTimestamp).ToArrayAsync();
该查询似乎返回表中的所有数据,而不管时间戳的值如何。当我单步执行代码并检查返回的每个实体的属性时,它们具有正确的数据,但它们不应该属于结果集。
该实体将Timestamp属性指定为DateTime对象,这是否是Oracle数据类型TIMESTAMP的正确表示形式?
我认为问题是高分辨率时间戳最终总是比我传递的日期时间稍早,而Linq已将其截断。有办法解决吗?
一些相关的问题:
正如我在评论部分所指出的那样,我遇到了相同的问题:
我写信给Oracle团队,他们承认这是一个错误。您可以在以下位置检查我的问题:https : //community.oracle.com/thread/4288922,您需要等待其新版本Oracle.ManagedDataAccess.EntityFramework
得到修复。
但是,作为一种替代方法,您可以使用SQLRawQuery
,它对我们有用。
dbContext.Database.SqlQuery("SELECT * FROM Mytable WHERE Timestamp > :LastTimestamp", new OracleParameter("LastTimestamp", OracleDbType.TimeStamp, LastTimestamp, System.Data.ParameterDirection.Input)).ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句