我正在使用 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; }
。(我没有检查所有成员)。
- 1 回答
- 0 关注
- 210 浏览
添加回答
举报
0/150
提交
取消