繁体   English   中英

Dapper将我的日期转换为01年1月1日,我看不到为什么?

[英]Dapper is converting my dates into 01-Jan-01 and I cannot see why?

我正在使用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。

我不明白 有人可以在这里向我指出正确的方向吗?

@John的评论正确。 财产(这里的名称CreationDateTime )通常必须列的名称(这里匹配CreationTime )。 话虽如此,它实际上不是表列的名称,而是结果列的名称,因此您可以执行以下操作:

SELECT CreationTime as CreationDateTime, ...

是否可以修改实际查询。

正如@fstam所评论的:行为是01-jan-01是DateTime的默认值,并且由于它是不可为null的类型,并且从来没有被dapper设置为任何值,因此它是显示的值。

请注意, 此处提供用于查找列名成员的逻辑:

//偏好顺序为:下划线完全匹配,错误大小写完全匹配,常规字段后备字段,match-exc下划线匹配match-inc-下划线

对于您而言,以上都不适用; 最好在代码中调整属性的名称。

更新:

我刚刚看到的另一件事:模式中的DurationMs列可以为空,而DurationMs属性则不能为空。 您可能想将此属性定义为public int? DurationMs { get; set; } public int? DurationMs { get; set; } public int? DurationMs { get; set; } (我尚未检查所有成员)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM