我有一个使用sql Compact 4.0数据库的Windows应用程序,使用EF 4.1和代码优先方法。
我无法保存对象到数据库,因为我得到一个异常,与内部异常
“转换为datetime时发生溢出”
当尝试保存类型报价:
我无法保存对象到数据库,因为我得到一个异常,与内部异常
“转换为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用于该字段,则当然)。