我在日志中收到来自 OrmLiteWriteCommandExtensions 的错误,而且我似乎无法找到发生这种情况的位置。我没有丢失数据;当我将 logfactory 设置为 null 时,它不会出现任何错误;我已将其设置为允许零日期,但这没有帮助。我不知道如何调试或解决它。它用我无法跟踪的语句堵塞了我的日志。
Linux 和 Windows 上都会出现这种情况。
有人知道如何实现这一点吗?
OrmLiteWriteCommandExtensions System.FormatException: String was not recognized as a valid DateTime. at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style) at System.DateTime.ParseExact(String s, String format, IFormatProvider provider, DateTimeStyles style) at ServiceStack.Text.Common.DateTimeSerializer.ParseShortestXsdDateTime(String dateTimeStr) at ServiceStack.OrmLite.Converters.DateTimeConverter.FromDbValue(Type fieldType, Object value) at ServiceStack.OrmLite.OrmLiteWriteCommandExtensions.PopulateWithSqlReader[T](T objWithProperties, IOrmLiteDialectProvider dialectProvider, IDataReader reader, Tuple`3[] indexCache, Object[] values)
更新:
日志记录发生在 nlog 配置文件中正确的文件集中,但仅对于此异常,它不符合 NLOG 布局集中的格式(所有其他异常都符合!)。
布局字符串: ${longdate} ${machinename} ${logger} ${level} ${message} ${oneException:发生异常:${exception:format=type,message,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method }}
更新2已解决:
所以这很有趣......在我开始解释如何解决它之前,我不得不说我不知道为什么它会写入正确的日志文件,但忽略所有日志记录错误的格式 - 这是另一条龙再杀一次。
所以问题是mysql数据库中的varchar字段将出生日期作为字符串,并且dotnet中的DateTime到字符串之间的隐式转换出现错误。
将数据库中的字段更改为日期时间后,错误消失了。
有趣的是,我必须设置 minlevel 来跟踪,以在调用数据库的上下文中获取错误 - 但它仍然忽略所有错误格式,没有堆栈跟踪,没有 sql 语句,也没有与日志中的错误。
最佳答案
所以问题是 mysql 数据库中的 varchar 字段将生日作为字符串,并且 dotnet 中的 DateTime 到字符串之间的隐式转换出现错误。
将数据库中的字段更改为日期时间后,错误消失了。
有趣的是,我必须设置 minlevel 来跟踪,以在调用数据库的上下文中获取错误 - 但它仍然忽略所有错误格式,没有堆栈跟踪,没有 sql 语句,也没有与日志中出现错误。
关于MYSQL OrmLiteWriteCommandExtensions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871243/