EF Core 参数化日期时间格式无效

问题描述 投票:0回答:1

我正在 SQL Server 上使用 EF Core 运行基本查询,使用参数化查询,其中查询为:

SELECT COUNT(*) 
FROM MyTable 
WHERE Created >= @0

我的参数是:

new DateTime(2024, 10, 1, 16, 47, 15)

EF Core 生成以下 SQL 查询:

SELECT COUNT(*) 
FROM MyTable AS [m] 
WHERE [m].[Created] >= '2024-10-01T16:47:15.0000000'

这会导致以下错误:

从字符串转换日期和/或时间时转换失败。

我知道,如果我在 SSMS 中运行该查询并将日期格式设置为 '2024-10-01T16:47:15' 而不是 '2024-10-01T16:47:15.0000000' 那么它工作正常 -我不明白为什么 EF Core 会自我破坏。有人有什么想法吗?

为免生疑问:

  • Created
    数据库字段是一个
    datetime NOT NULL
  • 参数是一个
    DateTime
sql-server datetime entity-framework-core prepared-statement
1个回答
0
投票

已解决

在发布之前搜索了一段时间,由于这篇文章,几分钟后我偶然发现了答案https://stackoverflow.com/a/62393901/175893

原因是 EF Core 认为

public DateTime Created { get; set; }
实体对象上的

在数据库中是一个

datetime2
,而实际上它实际上是一个
datetime
(我的意思是,为什么不呢?哈哈)

所以解决方案是给它一个

Column
属性来定义底层数据类型

[Column(TypeName = "datetime")]
public DateTime Created { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.