如何解决实体框架DateTime具有毫秒差异,而数据仍保留在数据库中
我将DateTime保存在表中,然后在where子句中使用相同的DateTime对象进行查询,结果为null
。我已经注意到C#DateTime对象和数据库中存储的日期之间以毫秒为单位的差异。
注意:由于某些原因,我不得不使用DateTime来检索记录。
以下是用于保存然后检索相同记录的C#代码。
DateTime startTime= DateTime.Now;
// startTime Object Details
//Date {9/9/2020 12:00:00 AM}
//Day 8
//DayOfWeek Tuesday
//DayOfYear 252
//Hour 13
//Kind Local
//Millisecond 221
//Minute 40
//Month 9
//Second 30
//Year 2020
BATCH_JOB_EXECUTION bjeToAdd = new BATCH_JOB_EXECUTION();
bjeToAdd.JOB_NAME = "POPULATE_TRAN_SUMMARY";
bjeToAdd.START_TIME = startTime;
context.BATCH_JOB_EXECUTION.Add(bjeToAdd);
context.SaveChanges();
此时,数据已保存在数据库中。使用SQL SELECT * FROM BATCH_JOB_EXECUTION
查询数据库时,值START_TIME
列为2020-09-08 13:40:30.223
。请注意,以毫秒为单位221
和223
的差异。现在,C#代码继续如下:
// startTime object is not changed millisecond of this startTime Object is 221 !!
var bjeToUpdate = (from batch in context.BATCH_JOB_EXECUTION
where batch.START_TIME == startTime
select batch).FirstOrDefault();
// bjeToUpdate is null
以下是一些查询及其在注释中的行为:
SELECT * FROM BATCH_JOB_EXECUTION WHERE START_TIME = '2020-09-08 13:40:30.225' // No record found
SELECT * FROM BATCH_JOB_EXECUTION WHERE START_TIME = '2020-09-08 13:40:30.224' // Record Found. START_TIME is 2020-09-08 13:40:30.223
SELECT * FROM BATCH_JOB_EXECUTION WHERE START_TIME = '2020-09-08 13:40:30.223' // Record Found. START_TIME is 2020-09-08 13:40:30.223
SELECT * FROM BATCH_JOB_EXECUTION WHERE START_TIME = '2020-09-08 13:40:30.222' // Record Found. START_TIME is 2020-09-08 13:40:30.223
SELECT * FROM BATCH_JOB_EXECUTION WHERE START_TIME = '2020-09-08 13:40:30.221' // No record Found
现在,通过观察这种奇怪的行为,我想了解以下内容
-
为什么要保存的C#DateTime对象与数据库字段之间的毫秒数不同。
-
观察SQL查询,为什么SQL具有此行为以提取相差001毫秒的记录。
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。