Даппер переводит мои даты в 01.01.01, и я не могу понять, почему? - PullRequest
0 голосов
/ 20 декабря 2018

Я использую SQL Server 2012 и Dapper v1.50.5.

У меня есть стандартный запрос:

SELECT * 
FROM [TsData].[ImportingLogs] 
WHERE ImportContextGuid = '{3c19d706-0895-49e4-b96c-38eb6a3cc579}'

, который возвращает некоторые данные:

enter image description here

и столбец CreationTime, в котором я заинтересован, имеет действительное время.

Таблица просто определяется как:

enter image description here

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.

Я не понимаю этого.Может кто-нибудь указать мне правильное направление, пожалуйста?

1 Ответ

0 голосов
/ 20 декабря 2018

@ Джон правильно сказал в своем комментарии.Имя свойства (здесь CreationDateTime) обычно должно совпадать с именем столбца (здесь CreationTime).Сказав это, на самом деле это не имя столбца таблицы, а имя столбца результата, поэтому вы можете сделать что-то вроде этого:

SELECT CreationTime as CreationDateTime, ...

, если вы можете изменить фактический запрос.

Как прокомментировал @fstam: поведение состоит в том, что 01-jan-01 является значением по умолчанию для DateTime и, поскольку это тип, не допускающий значения NULL, и никогда не устанавливаемый на что-либо с помощью dapper, это показанное значение.

Обратите внимание, что логика, применяемая для поиска члена по имени столбца, доступна здесь :

// порядок предпочтений: точное совпадение с подчеркиванием, точный регистрв неправильном случае, резервные поля над обычными полями, совпадения с подчеркиванием по сравнению с совпадением с подчеркиванием

В вашем случае, однако, ни одно из вышеперечисленного не применимо;вероятно, лучше настроить имя свойства в коде.

Обновление:

Еще одна вещь, которую я только что видел: столбец DurationMs в вашей схемеобнуляется, но свойство DurationMs не является.Возможно, вы захотите определить это свойство как public int? DurationMs { get; set; }.(Я не проверил всех участников).

...