实体框架更新未触发。古怪比比皆是

时间:2013-07-11 17:14:49

标签: c# entity-framework-4

我很适合使用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并将entertainmentvalue变量键入为十进制,如下所示: -

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

1 个答案:

答案 0 :(得分:0)

我的难以置信的灾难。在Teddies显然是在第一次保存之后(并且它一直都是),后来在链上我传递了一个空的泰迪对象以保存用于其他目的。 Sloppy code =愚蠢的错误。史蒂夫,非常感谢 - 请添加一个答案,我会将其标记为correc