-1

我对使用 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并将entertainmentandvalue变量输入为十进制,如下所示:-

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”?不幸的是,数据仍然没有保存到数据库中。

4

1 回答 1

0

对我而言,令人难以置信的灾难。在泰迪熊显然在第一次被保存之后(并且一直如此),后来在链条上我传递了一个空的泰迪熊对象以用于另一个目的。马虎的代码=愚蠢的错误。史蒂夫,非常感谢 - 请添加答案,我会将其标记为正确

于 2013-08-27T19:55:22.710 回答