【发布时间】:2019-11-17 23:32:23
【问题描述】:
我有一个在 UTC 时区运行的 Azure SQL Server 数据库,以及一个在 EST 时区运行的 C# EF WebApi。
不能选择更改 SQL Server 时区或 WebApi 的时区。
在此查询中,EF 使用的是 SQL Server 的 DateTime.Now 值:
var results = db.Table1.Where(t => t.PublishedDate < DateTime.Now)
在此查询中,EF 使用 DateTime.Now 的 WebApi 值:
var now = DateTime.Now;
var results = db.Table1.Where(t => t.PublishedDate < now)
第二个查询根据 WebApi 的时区返回正确的结果。
在第一个示例中,为什么 EF 将 DateTime.Now 解释为 SQL Server 的时区?有没有办法阻止这种情况,使第一个查询正常工作?
【问题讨论】:
-
第一个示例将使用 DateTime.Now 的表达式传递给 SQL 服务器以转换为 SysDateTime()。第二个示例只是传递一个 DateTime 变量,因此 EF 会将日期文字传递给 SQL。
标签: sql-server entity-framework datetime