asp.net的MVC:SQLDateTimeOverflow问题与实体框架

问题描述:

我试图更新对象,并获得:asp.net的MVC:SQLDateTimeOverflow问题与实体框架

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. 

有在对象两个字段是datetime对象,他们正在与设置:

obj.created_date = DateTime.Now; 
    obj.modified_date = DateTime.Now; 

除一切看起来合理的,当我查看对象:

>? obj.created_date 
{1/13/2010 4:02:47 PM} 
    Date: {1/13/2010 12:00:00 AM} 
    Day: 13 
    DayOfWeek: Wednesday 
    DayOfYear: 13 
    Hour: 16 
    Kind: Unspecified 
    Millisecond: 817 
    Minute: 2 
    Month: 1 
    Second: 47 
    Ticks: 633989953678170000 
    TimeOfDay: {16:02:47.8170000} 
    Year: 2010 
>? obj.modified_date 
{1/19/2010 12:20:50 PM} 
    Date: {1/19/2010 12:00:00 AM} 
    Day: 19 
    DayOfWeek: Tuesday 
    DayOfYear: 19 
    Hour: 12 
    Kind: Local 
    Millisecond: 333 
    Minute: 20 
    Month: 1 
    Second: 50 
    Ticks: 633995004503331818 
    TimeOfDay: {12:20:50.3331818} 
    Year: 2010 

任何想法是怎么回事 上?即使从数据库中读取字段,然后尝试将其保存回来而不进行更改,也会导致错误。其他班级没有问题,我也看不出任何会导致此错误的差异。

我添加

<globalization culture="en-US" /> 

到我的web.config,没有变化。

这些问题出现在我的本地设备上

+0

你可以发布一些你正在做什么,当你访问和保存对象的代码吗? – bobwah 2010-01-19 16:45:16

+2

只是猜测 - 有没有另一个DateTime属性的地方,可能不会被初始化(并因此被设置为0/0/0001?)。你展示的两个都没问题,那些肯定不会造成任何麻烦。 – 2010-01-19 16:50:49

好的,这是发生了什么事。 marc_s有正确的想法。

有是粘结剂处理的更新:

TryUpdateModel(editItem, new string[] { "LookupTable", "TextField1", "TextField2" }); 

我从调用TryUpdateModel去掉了“LookupTable中”,而是与处理在粘合剂中的值:

var fkid = Convert.ToInt32(controllerContext.HttpContext.Request.Form["LookupTable.ID"]); 
    EntityKey ek = new EntityKey("entities.LookupTable", "ID", fkid); 
    obj.LookupTableReference.EntityKey = ek; 

显然,由于某种原因,EF试图更新LookupTable值。