Entity framework 6 DbContext在创建对象图时更改存储在数据库中的日期

Entity framework 6 DbContext在创建对象图时更改存储在数据库中的日期,entity-framework-6,Entity Framework 6,这个问题现在更像是一种好奇心。约会将是我的结束 使用EF6 我在同一个http请求中存储日期和时间,将对象从数据库中拉回来 当我查看EF发送的SQL时,返回的相关日期的毫秒数与存储在db中的相同(预期行为) 但是,当EF将其反序列化到内存中的对象图中时,毫秒是不同的 所以,我保存“2018-10-16 21:46:22.293” SQL检索“2018-10-16 21:46:22.293” EF反序列化到2018-10-16 21:46:22.294 我通过使用原始ADO.NET查询访问数据库创

这个问题现在更像是一种好奇心。约会将是我的结束

使用EF6

我在同一个http请求中存储日期和时间,将对象从数据库中拉回来

当我查看EF发送的SQL时,返回的相关日期的毫秒数与存储在db中的相同(预期行为)

但是,当EF将其反序列化到内存中的对象图中时,毫秒是不同的

所以,我保存“2018-10-16 21:46:22.293”
SQL检索“2018-10-16 21:46:22.293”
EF反序列化到2018-10-16 21:46:22.294

我通过使用原始ADO.NET查询访问数据库创建了一个变通方法,该查询获取准确的日期('2018-10-16 21:46:22.293')

更奇怪的是,如果我使用一个新的DbContext并用它抓住整个对象,那么日期就可以了,即“2018-10-16 21:46:22.293”

因此,只有当我使用保存数据的同一DbContext来检索数据时,日期才会四舍五入(或其他)

有人见过这种奇怪的行为吗?有比原始SQL(ado.net)或新的DbContext更好的修复方法吗


干杯

您可以通过在检索查询中附加
.AsNoTracking()
来绕过EF缓存。

有趣!如果通过在检索查询中附加
.AsNoTracking()
来绕过EF缓存,会发生什么情况?@alistairfindley对于迟到的答复表示抱歉。看起来使用AsNoTracking确实解决了这个问题。无论如何,我应该使用它,因为它是一个没有操作的直接查询(没有更新等)。将进行进一步测试,但早期指标很好。很好-让我们知道你进展如何…@Alistaffirindlay抱歉,我忘了就此回复你。AsNoTracking确实解决了这个问题。进一步的测试证实了这一点。很高兴把它作为答案(当然),如果你是这样发布的。作为答案发布-谢谢!