代码之家  ›  专栏  ›  技术社区  ›  chris

ASP.NET MVC:实体框架的SqlDateTimeOverflow问题

  •  0
  • chris  · 技术社区  · 15 年前

    我试图更新一个对象,得到:

    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,没有任何更改。

    这些问题在我的本地开发人员身上

    1 回复  |  直到 15 年前
        1
  •  0
  •   chris    15 年前

    好吧,这是发生的事。马克斯的想法是对的。

    有一个活页夹正在处理更新:

      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值。