C# Dapper正在将我的日期转换为01-Jan-01,我不明白为什么?
我正在使用SQLServer2012和DapperV1.50.5 我有一个标准查询:C# Dapper正在将我的日期转换为01-Jan-01,我不明白为什么?,c#,.net,dapper,C#,.net,Dapper,我正在使用SQLServer2012和DapperV1.50.5 我有一个标准查询: SELECT * FROM [TsData].[ImportingLogs] WHERE ImportContextGuid = '{3c19d706-0895-49e4-b96c-38eb6a3cc579}' 返回一些数据: 我感兴趣的CreationTime列具有有效的日期时间 该表的定义如下: POCO是: public class OzCsImportingLogsTableModel {
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; }
}
而简洁的电话是:
DbContext.Execute($"[{Schema}].[usp_ImportingQueue_FinaliseImport]", storedProcParams, aCommandType: CommandType.StoredProcedure)
但是,当我查看OzCsImportingLogsTableModel.CreationTime
时,该值总是01-Jan-01 00:00:00
,这表示该值为空
我不明白。有人能在这里给我指一下正确的方向吗?@John的评论是正确的。属性的名称(此处
CreationDateTime
)通常必须与列的名称匹配(此处CreationTime
)。话虽如此,它实际上不是表列的名称,而是结果列的名称,因此您可以这样做:
SELECT CreationTime as CreationDateTime, ...
如果可以修改实际查询
正如@fstam所评论的:行为是01-jan-01是DateTime的默认值,因为它是不可为null的类型,并且从不由dapper设置为任何值,所以它是显示的值
请注意,用于查找列名成员的逻辑可用:
//优惠次序如下:
精确匹配超过下划线匹配,精确
大小写超过错误大小写,支持字段超过常规字段,
match inc下划线超过match exc下划线
然而,在您的情况下,上述任何一项均不适用;最好在代码中调整属性的名称
更新:
我刚才看到的另一件事是:模式中的DurationMs
列可以为空,但DurationMs
属性不能为空。您可能需要定义
将此属性设置为public int?而是DurationMs{get;set;}
。
(我没有检查所有成员)。这是因为您的数据库字段是
CreationTime
,并且您的模型属性是CreationDateTime
?免责声明:我从未使用过Dapper。对behavoir的进一步解释是01-jan-01是DateTime的默认值,因为它是不可为null的类型,并且Dapper从未将其设置为任何值,所以它是显示的值。