【问题标题】:Updating EF model throws ""Arithmetic overflow error converting expression to data type datetime"更新 EF 模型引发“将表达式转换为数据类型日期时间的算术溢出错误”
【发布时间】:2013-09-19 00:41:52
【问题描述】:

我创建了一条没有问题的新记录,但每当我更新模型时,即使日期没有更改,我也会收到“将表达式转换为数据类型日期时间的算术溢出错误 " 错误。

我已确认要更新的现有数据库记录中的日期有效。

即使没有更新日期字段,下面的代码 sn-p 也会失败。

var dbModule = db.Modules.FirstOrDefault(v => v.ModuleId == module.ModuleId);

dbModule.Name = module.Name;
//dbModule.Password = module.Password;
//dbModule.Colour = module.Colour;
//dbModule.Modified = module.Modified;

db.SaveChanges();

如果我查看跟踪,我会看到下面的命令,因此可以确定没有更新日期字段。

ADO.NET:Execute NonQuery "update [dbo].[Modules]
set [Name] = @0
where ([ModuleId] = @1)"

为了清楚起见,操作环境是:

  • ASP.NET MVC 3
  • .NET 4.5
  • SQL Server 2012 (Express)
  • 由数据库优先方法生成的模型,带有相应的 edmx。
  • DateTime 模型字段在 SQL Server 中属于 DateTime 类型

我尝试使用 SQL Server Profiler,但它没有输出更新语句来查看确切的 SQL,所以我依赖上面提供的智能跟踪。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net sql-server entity-framework


    【解决方案1】:

    啊啊啊啊!日复一日。

    使用 SQL Server Profiler,我发现我必须同时记录两者

    • RPC:已完成
    • SQL:批处理完成

    这显示了所有的 SQL 语句,这使我能够追踪到我在数据库上触发了触发器、设置了 Modified 字段以及使用了格式不正确的字符串日期。

    【讨论】:

    • 多年后,你的痛苦将我从自己的痛苦中拯救出来。我讨厌触发器。或者至少引发滥用。终极隐藏陷阱。
    • 太棒了!我很高兴它让你免于痛苦。
    【解决方案2】:

    BlinkyBill,检查您的实体/数据库上的日期时间字段是否可以为空,以及您是否使用了正确的映射。 此外,您可以尝试在更新方法上明确设置此字段。 希望对您有所帮助!

    【讨论】:

    • 感谢您的建议。我尝试使日期时间字段为空,但无济于事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2023-03-15
    相关资源
    最近更新 更多