我使用实体框架核心将两个日期时间变量保存到SQL数据库(托管在Azure中)表中。保存后以某种方式查询数据库时,我注意到datetime值已更改。您可以在下面保存之前看到初始值。
保存后,它在数据库中显示如下
我通读了一些技术文档,以查找可能影响此操作的因素。不过,我没有发现任何有趣的东西。
能否请您帮助我了解此数据更改的原因?我很确定没有任何存储过程或任何其他脚本可以更改这些日期。
// step 3: update tblStudent
var tblStudentEntityToUpdate = await _applicationDbContext.Value.StudentApplications.FirstOrDefaultAsync(x => x.StudentID == vm.StudentID);
vm.GuardianID = guardianId;
_applicationDbContext.Value.Entry(tblStudentEntityToUpdate).CurrentValues.SetValues(vm);
await _applicationDbContext.Value.SaveChangesAsync();
答案 0 :(得分:0)
正如zaitsman在评论中提到的那样,原因是您正在使用本地格式的DateTime。无论选择哪个数据中心位置,您的SQL Azure服务器都设置为UTC时区。 AFAIK,无法更改。
始终建议将DateTimes存储为UTC,因为这样可以避免在本地时间写入数据,然后在不同时区假设的情况下读取数据的问题。
据我了解,您的应用程序应该可以正常工作,因为您的应用程序将读取这些值并将其正确存储为UTC DateTimes,如果您想在特定时区显示此信息,则可以调用DateTime.ToLocalTime。