Asp.net mvc 使用EF4转换为datetime时发生溢出

Asp.net mvc 使用EF4转换为datetime时发生溢出,asp.net-mvc,ef-code-first,entity-framework-4.1,sql-server-ce,Asp.net Mvc,Ef Code First,Entity Framework 4.1,Sql Server Ce,我有一个使用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;

我有一个使用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实现自己的
IModelBinder
来更改此行为,即,如果尝试的值为null/empty且属性不可为null,则可能引发验证异常)

如果试图将该值(
DateTime.MinValue
)保存到数据库中,则如果数据库字段为sql类型的DateTime,则会出现转换错误,因为.net DateTime.MinValue小于sql DateTime MinValue(01/01/1753),因此无法转换为sql值。()


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

这是一个老问题。。。但也许有人会觉得这很有帮助:

我使用以下定义解决了问题(MVC4、EF5、SqlServerCE 4.0):

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

玩得开心

我遇到了同样的问题,保存在数据库对象上的dateTime属性最初为null


在将对象保存到本地CE数据库之前,请验证是否已分配了实际日期时间。

是否已将应用程序中的
DateCreated
设置为
datetime。现在
?我犯了一个愚蠢的错误。代码中的某个地方DateCreated为空。您能否以有助于他人的方式回答自己的问题?如果您这样做,您可以选择您的作为正确答案。这可能看起来很奇怪,但这是处理类似情况的首选方法。