我正在尝试解决的问题
使 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/