Подтвердить что ты не робот

Переполнение произошло при преобразовании в datetime с использованием EF4

У меня есть приложение Windows, работающее с базой данных SQL Compact 4.0, с использованием EF 4.1 и подхода, основанного на кодах. Я не могу сохранить объект в базе данных, так как получаю исключение, с внутренним исключением "Переполнение произошло при преобразовании в дату и время" при попытке сохранить тип Котировка:

public class Quotation
{
    public int ID { get; set; }

    public string Name { get; set; }

    public DateTime DateCreated { get; set; }

    public ContactPerson ContactPersonAssigned { get; set; }

    public string OurReference { get; set; }

    public string QuotationDataString { get; set; }
}

Я читал, что эта ошибка может быть вызвана несоответствием между настройками моего приложения и настройками базы данных sql compact относительно преобразования даты. Я не уверен в этом, так как у моего файла базы данных sdf есть поле, которое правильно названо "DateCreated", not-nullable и типа "datetime".

Я новичок в SQL compact. Не могли бы вы помочь мне отладить эту проблему?

4b9b3361

Ответ 1

Если ваша модель имеет свойство non-nullable типа DateTime, когда вы отправляете форму с пустым значением для этого свойства, она автоматически устанавливается в DateTime.MinValue, которая находится в .net 01/01/0001 (DateTime.MinValue в MSDN)

(В качестве побочного примечания вы можете изменить это поведение, выполнив свой собственный IModelBinder для DateTime, который может, например, выбросить исключение проверки, если попытка имеет значение null/empty и свойство не равно NULL).

Если вы попытаетесь сохранить это значение (DateTime.MinValue) в базе данных, вы получите ошибку преобразования, если поле базы данных имеет тип datetime типа sql, поскольку .net DateTime.MinValue меньше минимального значения datetime SQL (01/01/1753 ) и поэтому не может быть преобразован в значение sql. (Минимальное значение SQL datetime для MSDN)

Эта ошибка не будет возникать в более поздних версиях MS SQL Server, которые имеют тип данных datetime2, который позволяет значения с 01/01/0001 по 31/12/9999 (SQL datetime2 в MSDN) (если datetime2 используется для этого поля, конечно).

Ответ 2

Это старый вопрос... но, возможно, кто-то может найти это полезным:

Я решил проблему (MVC4, EF5, SqlServerCE 4.0), используя следующее определение:

public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }

Удачи!

Ответ 3

У меня была одна и та же проблема: при создании элемента базы данных даты базы данных dateTime исходное значение было нулевым.

Убедитесь, что фактическое дата-время было назначено перед сохранением объекта в локальной базе данных CE.