Преобразование типа данных datetime2 в тип данных datetime привело к значению вне допустимого диапазона. как я могу исправить

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

ОПРЕДЕЛЕНИЕ БАЗЫ ДАННЫХ:

[DeletedDate] [datetime] NULL,

ПРЕДСТАВЛЕНИЕ КОДА С#:

public DateTime? DeletedDate { get; set; }

Я получил ошибку:

Преобразование типа данных datetime2 в тип данных datetime привело к значению вне допустимого диапазона. Заявление было прекращено. at System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое значение breakConnection, Action`1 wrapCloseInAction)....

Я пробовал это, но у меня ничего не работает

[Column(TypeName = "datetime2")]
 public DateTime? PropertyName { get; set; }

РЕДАКТИРОВАТЬ: проблема заключалась в том, что я пытался отправить 0001/01/01... значение даты и времени в sql. и это вызвало проблемы.

FLUENT API решил мою проблему.

entity.Property(e => e.CreatedDate).HasColumnName("CreatedDate").HasDefaultValueSql("(getdate())");
entity.Property(e => e.UpdatedDate).HasColumnName("UpdatedDate").HasDefaultValueSql("(getdate())");

person Ozmen    schedule 21.06.2019    source источник
comment
ваш столбец не типа datetime2, а типа datetime. Это означает, что каждый раз, когда DeletedDate необходимо вставить/обновить в вашу базу данных, EF должен преобразовать переданное значение DateTime2 в значение DateTime. Поскольку DateTime имеет меньший диапазон значений, чем DateTime2, это может привести к ошибке. Особенно будьте осторожны, если вы установите его по умолчанию, потому что объект DateTime по умолчанию в С# относится к году 1, который не находится в диапазоне столбца даты и времени.   -  person DevilSuichiro    schedule 21.06.2019
comment
поэтому это причина, по которой требуется решение   -  person Ozmen    schedule 21.06.2019
comment
все дело в том, что вы передаете значение, которое не можете сохранить в базе данных в этом столбце. Избавьтесь от этого значения, либо установив его значение null, удалив строку или что-то еще, либо фактически перенеся базу данных в предполагаемую модель с типом столбца datetime2.   -  person DevilSuichiro    schedule 21.06.2019
comment
Но что, если столбцы определены как дата и время в базе данных? Что я должен делать?   -  person Ozmen    schedule 21.06.2019
comment
если у вас все еще есть этот вопрос, вы должны прочитать мои комментарии еще раз.   -  person DevilSuichiro    schedule 21.06.2019


Ответы (1)


Ваше свойство DeletedDate содержит значение, которое меньше поддерживаемого значения для SqlDateTime.MinValue.Value, перед сохранением или обновлением базы данных попробуйте

if(DeletedDate < SqlDateTime.MinValue.Value)
 DeletedDate = SqlDateTime.MinValue.Value
person Hamza Khanzada    schedule 21.06.2019
comment
Я не хочу применять это решение. Я хочу представить как какой-то формат в С# (Fluent API или тег атрибута) и избавиться от проблемы. - person Ozmen; 21.06.2019
comment
и я не хочу присваивать минимальное значение, я хочу присвоить NULL - person Ozmen; 21.06.2019
comment
Можете ли вы обновить свой вопрос своим кодом, который выдает ошибку? - person Hamza Khanzada; 21.06.2019
comment
Ваш метод не сработал. Я имею право только изменить сторону C #. Вопрос [DeletedDate] [datetime] NULL, как я могу передать значение из С#? (у меня ошибка) Спасибо. - person Ozmen; 21.06.2019
comment
Не могли бы вы показать свой код С#, который выдает ошибку? - person Hamza Khanzada; 21.06.2019
comment
спасибо, но код такой длинный. невозможно поделиться, я должен поделиться всей базой данных и всей процедурой сохранения, так что это будет неэффективно и так сложно - person Ozmen; 21.06.2019
comment
entity.Property(e => e.CreatedDate).HasColumnName("CreatedDate").HasDefaultValueSql("(getdate())"); entity.Property(e => e.UpdatedDate).HasColumnName("UpdatedDate").HasDefaultValueSql("(getdate())"); Эти строки отсортированы, проблема БЫЛА не в DeletedDate или NULL. - person Ozmen; 21.06.2019