asp.net-mvc – 使用EF4转换为datetime时发生溢出

我有一个使用sql Compact 4.0数据库的Windows应用程序,使用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。你能帮我调试这个问题吗?

解决方法

如果您的模型具有类型为DateTime的不可空属性,则当您发布具有该值的空值的表单时,它将自动设置为DateTime.MinValue,它在.net 01/01/0001( DateTime.MinValue on MSDN)中。

(作为附注,您可以通过为DateTime实现自己的IModelBinder来更改此行为,如果尝试的值为空/空且属性不可为空,则可以抛出验证异常)。

如果您尝试将该值(DateTime.MinValue)保存到数据库中,则如果数据库字段为sql type datetime,则会得到转换错误,因为.net DateTime.MinValue小于sql datetime minvalue(01/01/1753),因此无法转换为sql值。 (SQL datetime min value on MSDN)

较新版本的MS sql Server将不会发生此错误,它具有datetime2数据类型,允许从01/01/0001到31/12/9999(SQL datetime2 on MSDN)的值(如果datetime2用于该字段,则当然)。

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...