簡體   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