c# - OrmLite LocalDate 到 DateTime 转换器未应用于 Sqlite 内存数据库的 Where 子句

标签 c# datetime servicestack ormlite-servicestack nodatime

Referenced Code

我正在尝试解决的问题

使 ValuationsCommanderTests.SetTransactionAndRelatedEmbeddedDerivativevaluationsToBad_ValidInput_CorrectlyManipulatesDB() 通过。

尝试解决问题

调试后,我缩小了它无法通过的原因,因为私有(private)方法 ValuationsCommander.SetRelatedDailyTransactionHistoryRecordsToBad 从不更新记录,因为它是如何转换的(或者更确切地说不转换) NodaTime 的 LocalDate 尽管已经为这种类型注册了一个转换器。

此方法生成的 SQL 示例如下

UPDATE "cfo_daily_trans_hist" SET "dh_sn_scenario_id"=@dh_sn_scenario_id 
WHERE (("dh_tq_tran_quote_id" = @0) AND ('Saturday, November 13, 1993' <= "dh_val_time_stamp"))

从这个声明来看,在我看来,从 LocalDate 到 DateTime 的转换没有发生,而是决定通过 toString 而不是 DateTime 比较来比较它。

我认为可能导致此问题的一些原因如下:

  • 方言提供者未正确注册 NodeTime 转换器
  • 使用虚拟类创建 DailyTransactionhistoryTableModel,该虚拟类将 DateTime 作为 ValuationTimeStamp 的类型。

这些似乎都不是根本问题,我已经想不出解决这个问题的方法了。

关于 OrmLite 如何使用转换器或我可能尝试解决此问题的其他任何事情,我是否不了解?

最佳答案

像往常一样,归功于@mythz 解决了这个问题。 :)

问题最终是 LocalDate 到 DateTime OrmLiteConverter 的不完整实现,通过不实现 ToQuotedString() 它在 SQL 中发出值时使用默认字符串,结果是1993 年 11 月 13 日星期六 的效果,而不是 SQL 识别的日期时间格式。

关于c# - OrmLite LocalDate 到 DateTime 转换器未应用于 Sqlite 内存数据库的 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548217/

相关文章:

C# DateTime.ToString "o"格式在 Azure 上返回不同的字符串

ssl - 如何使用 fastcgi-mono-server4 和 nginx 启用 HTTPS?

c# - 如何解决 WMI 请求的 "Provider load failure"?

c# - 如何检索中继器内表列(ID)的TD值

javascript - date-fns:如何以 YYYY-MM-DDThh:mm:ss:dddddd 格式获取当前日期和时间

java - 使用可选部分通过 DateTimeFormatter 解析 "integer"时间

orm - ServiceStack.OrmLite如何按属性忽略属性

c# - ServiceStack 是否需要 ResponseStatus?

c# - 从 ObservableCollection 中删除空项

c# - 在 .NET 2.0 中将 List<int> 转换为 List<string>