使用EF4转换为datetime时发生溢出

Fra*_*sco 23 asp.net-mvc sql-server-ce ef-code-first entity-framework-4.1

我有一个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; }
}
Run Code Online (Sandbox Code Playgroud)

我读到这个错误可能是由于我的应用程序设置和关于日期转换的sql compact数据库设置不匹配引起的.我不确定,因为我的sdf数据库文件有一个正确命名为"DateCreated"的字段,不可为空且类型为"datetime".

我是SQL compact的新手.你能帮我调试一下这个问题吗?

Gor*_*vic 90

如果您的模型具有DateTime类型的非可空属性,当您发布该属性为空值的表单时,它将自动设置为DateTime.MinValue,该文件位于.net 01/01/0001(MSDN上的DateTime.MinValue)

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

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

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

  • 看到这些好的答案不被接受是一种耻辱. (7认同)