Произошло переполнение при преобразовании в datetime с использованием EF4 - PullRequest
23 голосов
/ 18 июля 2011

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

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», не обнуляемое и имеет тип «datetime».

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

Ответы [ 3 ]

90 голосов
/ 28 сентября 2011

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

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

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

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

1 голос
/ 01 июля 2013

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

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

1 голос
/ 14 июня 2013

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

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

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

Веселись!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...