C# 实体框架更新未触发。怪事比比皆是
我对EF的使用相当满意,我的大部分东西都“正常工作”。不幸的是,我在一个简单的更新中遇到了一个真正的难题。我认为这可能是一个典型的问题,但我想看看是否有其他人有一些意见 以下是相关代码:-C# 实体框架更新未触发。怪事比比皆是,c#,entity-framework-4,C#,Entity Framework 4,我对EF的使用相当满意,我的大部分东西都“正常工作”。不幸的是,我在一个简单的更新中遇到了一个真正的难题。我认为这可能是一个典型的问题,但我想看看是否有其他人有一些意见 以下是相关代码:- using (var ctx = new jetsetrEntities()) { var teddies = ctx.Teddies.First(i => i.Code == metric.Teddy); _log.Info("Teddies entertai
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
是空的/空的,ctx.SaveChanges()代码>实际上什么都不做。没有错误,但是从日志中我可以看到一些奇怪的事情正在发生,数据库没有更新
有人能指出我的愚蠢吗
一如既往,我们感谢您的帮助
克里斯
编辑1
谢谢你,基林斯沃思和格特·阿诺德。我添加了一个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"?. 不幸的是,数据仍然没有保存到数据库中。对我来说,这是一场难以置信的灾难。在泰迪熊第一次被保存之后(过去是,现在一直是),后来我传递了一个空的泰迪熊对象,以用于另一个目的。草率的代码=愚蠢的错误。史蒂夫,非常感谢-请添加一个答案,我将其标记为correc泰迪熊的类型是什么。Entertainment
field?Convert.ToDecimal(entertainment)
返回什么?teddies实际上只有一个teddy,只是有点误导。你有没有试着用try/catch(EntityCommandExecutionException e)来包装它,看看SaveChanges()是否正确执行?@Andrei'teddies.entertainment'是十进制的。我想我没有真正回答你的问题。发布您自己的答案并接受您自己的:)