Почему обрезается время при сохранении в БД колонки с типом DATE через EF6?

В БД есть колонка типа DATE. EF6 его определил как DateTime в модели. Я в него записываю DateTime.Now и сохраняю. В итоге сохраняется только дата, а время исчезает полностью.

Я прочитал, что Now вроде как может вернуть то ли милисекунды, то ли еще что-то, и из-за этого может быть несовпадение. Я попробовал явно собрать дату через конструктор, передав числами каждый элемент, но это не помогло.

Сталкивался кто-нибудь с такой проблемой?


Ответы (1 шт):

Автор решения: 0xdb

Сталкивался кто-нибудь с такой проблемой?

Все сталкивались. Просто дата и время хранятся в БД как структура из 8-ми байт. Если посмотреть на неё в "сыром" виде:

select dump (sysdate, 16) now from dual
/
NOW
-----------------------------------
Typ=13 Len=8: e4,7,c,8,15,1b,30,0

то вряд ли кому-то сразу станет понятно, что - сегодня 8-е декабря, около девяти вечера.

Поэтому, перед выводом значения с типом данных DATE оно всегда неявно преобразуется в удобочитаемое символьное значение. Это преобразование производится в соответствии с маской установленной в параметре nls_date_format. Какая часть даты или времени будет обрезана, зависит от этого параметра. Если формат неявного преобразования не устраивает, преобразуйте явно:

alter session set nls_date_format='mm/dd/rr';

select sysdate now from dual
/
NOW
--------
12/08/20

alter session set nls_date_format='hh24:mi';
/
NOW
-------
21:03

select to_char (sysdate, 'dd.mm.yyyy hh24:mi:ss') now from dual
/
NOW
-------------------
08.12.2020 21:05:07
→ Ссылка