我很适合使用EF和我的大多数东西“只是工作”。不幸的是,我遇到了一个简单更新的真正难题。我认为这可能是一个类型问题,但我想知道是否有其他人有一些意见。
这是有问题的代码: -
using (var ctx = new jetsetrEntities())
{
var teddies = ctx.Teddies.First(i => i.Code == metric.Teddy);
_log.Info("Teddies entertainment direct from data", teddies.Entertainment);
teddies.Value = Convert.ToDecimal(value);
teddies.Entertainment = Convert.ToDecimal(entertainment);
_log.Info("Now, has it changed?", teddies.Entertainment);
ctx.SaveChanges();
_log.Info("After the save...", teddies.Entertainment);
}
}
日志输出显示var teddies
正常工作并返回teddies.Entertainment
值,在本例中为0.00
。然后我尝试设置对象上下文的值 - 将小数转换为整数,以防万一。
但是现在,teddies.Entertainment
为空/ null,而ctx.SaveChanges();
实际上并没有做任何事情。没有错误,但从日志中我可以看到发生了一些奇怪的事情并且数据库没有更新。
有人能指出我的愚蠢吗?
一如既往,感谢您的帮助。
克里斯
编辑1
谢谢@Killingsworth和@Gert Arnold。我添加了try/catch
并将entertainment
和value
变量键入为十进制,如下所示: -
try
{
using (var ctx = new jetsetrEntities())
{
var teddy = ctx.Teddies.First(i => i.Code == metric.Teddy);
_log.Info("[1] teddy with entertainment={0}", teddy.Entertainment);
teddy.Value = value;
teddy.Entertainment = entertainment;
_log.Info("[2] Now, has it changed? {0}", teddy.Entertainment);
ctx.SaveChanges();
_log.Info("[3] After the save... {0}", teddy.Entertainment);
}
}
catch(Exception exception)
{
_log.Info("Exception occured {0}", exception.Message);
}
我没有例外,在这种情况下,teddy.Entertainment
在日志中输出为“31”。我想知道小数位在哪里? “31.00”?不幸的是,数据仍未保存到数据库中。
答案 0 :(得分:0)
我的难以置信的灾难。在Teddies显然是在第一次保存之后(并且它一直都是),后来在链上我传递了一个空的泰迪对象以保存用于其他目的。 Sloppy code =愚蠢的错误。史蒂夫,非常感谢 - 请添加一个答案,我会将其标记为correc