我正在 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
已解决
在发布之前搜索了一段时间,由于这篇文章,几分钟后我偶然发现了答案https://stackoverflow.com/a/62393901/175893
原因是 EF Core 认为
public DateTime Created { get; set; }
实体对象上的在数据库中是一个
datetime2
,而实际上它实际上是一个datetime
(我的意思是,为什么不呢?哈哈)
所以解决方案是给它一个
Column
属性来定义底层数据类型
[Column(TypeName = "datetime")]
public DateTime Created { get; set; }