我刚刚在使用 Dapper 和 SimpleCRUD 的系统上从 Npgsql v2.2.3 升级到 v3.2.4.1(现在是 V3.2.5)——其他缺席的开发人员定制了后者的版本。这不是我真正的领域——我只是想在 v3 支持下做一些 PostGIS 位......
我们有一个自定义版本的 DateTime,在 Npgsql v3.x 更严格的类型下,要求我们将 NpgsqlDbType 设置为 NpgsqlTypes.NpgsqlDbType.Timestamp。这是通过 SimpleCRUD 代码中的 Dapper.SqlMapper.AddTypeHandler 完成的。自定义版本强制日期时间类型为 UTC。
虽然这对数据库插入按预期工作,但在使用 WHERE 子句时似乎没有被调用 - 不确定它是否只是在孤立的情况下,或者只是在一个或两个地方。
我可以从 Postgres 日志中看到,WHERE 子句的参数正在针对 UTC/Local 转换进行调整:参数:$1 = '2017-07-27 13:29:51+01'
通过断点,我还可以看到类型处理程序不是为 WHERE 子句输入的,而是为 INSERT 等输入的。
问题:
我是否应该期望为 WHERE 子句参数调用 Dapper.SqlMapper 类型处理程序?
如果不是预期的行为,我如何在使用 Dapper.SimpleCRUD 时将 NpgsqlDbType 强制为 NpgsqlTypes.NpgsqlDbType.Timestamp?
非常感谢
我已经更新到 Npgsql (3.2.5) 和 Dapper (1.50.2) 的最新 NuGet 包。不确定 Dapper.SimpleCRUD 的起源,但它会在 2014 年开始使用,然后看起来可能被大量定制,因此宁愿继续这样做,而不是升级并重新添加定制。