我对使用 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
值,在本例中为 a 0.00
。然后我尝试设置对象上下文的值——将小数转换为整数,以防万一。
然而现在,teddies.Entertainment
它是空的/null,ctx.SaveChanges();
实际上并没有做任何事情。没有错误,但从日志中我可以看到发生了一些奇怪的事情并且数据库没有更新。
谁能指出我的愚蠢?
一如既往,感谢您的帮助。
克里斯
编辑 1
谢谢@Killingsworth 和@Gert Arnold。我添加了 atry/catch
并将entertainment
andvalue
变量输入为十进制,如下所示:-
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”?不幸的是,数据仍然没有保存到数据库中。