C# 更新EF模型抛出“&引用;将表达式转换为数据类型datetime时出现算术溢出错误;

C# 更新EF模型抛出“&引用;将表达式转换为数据类型datetime时出现算术溢出错误;,c#,asp.net,sql-server,entity-framework,C#,Asp.net,Sql Server,Entity Framework,我可以创建一个没有问题的新记录,但是每当我更新模型时,即使日期没有更改,我也会得到“算术溢出错误,将表达式转换为数据类型datetime”错误 我已确认现有db记录中要更新的日期是有效的 即使没有更新日期字段,下面的代码段也将失败 var dbModule = db.Modules.FirstOrDefault(v => v.ModuleId == module.ModuleId); dbModule.Name = module.Name; //dbModule.Password = m

我可以创建一个没有问题的新记录,但是每当我更新模型时,即使日期没有更改,我也会得到“算术溢出错误,将表达式转换为数据类型datetime”错误

我已确认现有db记录中要更新的日期是有效的

即使没有更新日期字段,下面的代码段也将失败

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)"
如果我查看跟踪,我会看到下面的命令,因此请确保没有更新日期字段

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.NETMVC3
  • .NET 4.5
  • SQL Server 2012(Express)
  • 通过数据库优先方法生成的模型,以及相应的edmx
  • DateTime模型字段在SQL Server中为DateTime类型
我曾尝试使用SQL Server Profiler,但它不会输出update语句来查看确切的SQL,因此我依赖上面提供的intellitrace


非常感谢您的帮助。

BlinkyBill,请检查您的实体/db上的datetime字段是否可为空,以及您是否使用了正确的映射。 此外,您可以尝试在更新方法中明确设置此字段。
希望有帮助

啊!日复一日

使用SQL Server Profiler,我发现我必须同时记录这两个日志

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

这显示了所有SQL语句,这使我能够跟踪到以下事实:我在数据库上触发了触发器,设置了修改后的字段,并使用了格式不正确的字符串日期。

感谢您的建议。我试着让datetime字段为空,但没有成功。许多年后,你的痛苦让我从自己的痛苦中解脱出来。我讨厌触发器。或者至少引发虐待。《隐藏的哥特》中的终极版。太棒了!我很高兴它让你免于一些痛苦。