为了账号安全,请及时绑定邮箱和手机立即绑定

Dapper 将我的日期转换为 01-Jan-01,我不明白为什么?

Dapper 将我的日期转换为 01-Jan-01,我不明白为什么?

C#
绝地无双 2022-06-19 16:24:23
我正在使用 SQL Server 2012 和 Dapper v1.50.5。我有一个标准查询:SELECT * FROM [TsData].[ImportingLogs] WHERE ImportContextGuid = '{3c19d706-0895-49e4-b96c-38eb6a3cc579}'它返回一些数据:并且CreationTime我感兴趣的列具有有效的日期时间。该表简单定义为:POCO 是:public class OzCsImportingLogsTableModel{    public DateTime CreationDateTime { get; set; }    public int? CreatorUserId { get; set; }    public int? DeleterUserId { get; set; }    public DateTime DeletionTime { get; set; }    public int DurationMs { get; set; }    public int Id { get; set; }    public Guid ImportContextGuid { get; set; }    public bool IsDeleted { get; set; }    public DateTime? LastModificationTime { get; set; }    public int? LastModifierUserId { get; set; }    public string Message { get; set; }    public OzCsImportManagerMessageKindEnum MessageKindId { get; set; }    public string Source { get; set; }    public string StructuredData { get; set; }    public string Tags { get; set; }}Dapper 的调用是:DbContext.Execute($"[{Schema}].[usp_ImportingQueue_FinaliseImport]", storedProcParams, aCommandType: CommandType.StoredProcedure)但是,当我查看时OzCsImportingLogsTableModel.CreationTime,该值始终01-Jan-01 00:00:00为 NULL,这表明该值为 NULL。我不明白这一点。有人可以在这里指出我正确的方向吗?
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

属性的名称(此处CreationDateTime)通常必须与列的名称(此处)匹配CreationTime。话虽如此,它实际上并不是表列的名称,而是结果列的名称,因此您可以执行以下操作:

SELECT CreationTime as CreationDateTime, ...

如果您可以修改实际查询。

正如@fstam 评论的那样:行为是 01-jan-01 是 DateTime 的默认值,并且由于它是不可为空的类型并且从未被 dapper 设置为任何内容,因此它是显示的值。

请注意,用于查找列名称成员的逻辑可在此处获得:

// 优先顺序是:精确匹配优于下划线匹配,精确大小写优于错误大小写,支持字段优于常规字段,match-inc-underscores 优于 match-exc-underscores

但是,在您的情况下,以上均不适用;最好在代码中调整属性的名称。

更新:

我刚刚看到的另一件事:DurationMs架构中的列可以为空,但DurationMs属性不是。您可能希望将此属性定义为public int? DurationMs { get; set; }。(我没有检查所有成员)。


查看完整回答
反对 回复 2022-06-19
  • 1 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号