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用于该字段,则当然)。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....