我有一个使用ADO.NET实体框架的.NET 4 WinForms应用程序。一些完美运作的代码决定停止工作,虽然我已经试图找出可能导致这种情况的改变,但我很难过。这段代码看起来非常实用,WAS按预期工作。
有人有什么想法吗?这是代码:
using (var pe = new ProposalEstimateEntities())
{
var tmc = GetToolingAndMaterialsCost(taskId, Constants.Materials);
if (tmc == null) return;
tmc.Amount = amount;
pe.SaveChanges();
}
tmc变量在方法调用之后保存ToolingAndMaterialsCost实体对象,因此不需要将对象添加到上下文中。 SaveChanges()应使用新金额保存对象,但不保存。没有异常被抛出。代码执行就像它愚蠢而快乐,但数据库中没有任何变化,当我返回显示数据的控件时,旧的预编辑数据就在那里。
这非常令人沮丧,任何帮助将不胜感激。
麦克
答案 0 :(得分:1)
如何在没有引用ObjectContext'pe'的情况下加载tmc?看起来你可能正在从不同的上下文中加载它?
如果是这样,那将无效。上下文跟踪已更改的实体。你'pe'上下文没有按照它的外观跟踪任何实体,因为除了SaveChanges调用之外它从未被引用过。
答案 1 :(得分:0)
我将逐步调试w /以确保tmc不为null。如果tmc确实是具有Amount字段的实体对象,那应该可以正常工作并且问题可能在其他地方。来自GetToolingAndMaterialsCost方法的代码怎么回事?
答案 2 :(得分:0)
卫生署!
对GetToolingAndMaterialsCost的调用使用了与方法中不同的ProposalEstimateEntities对象,因此我只是将实体对象添加到数据上下文中,并且它工作正常。当我重构时,我自己就开始了。