2010-10-26 150 views
2

我有一个使用ADO.NET实体框架的.NET 4 WinForms应用程序。一些完美工作的代码已经决定停止工作,尽管我试图找出可能导致这种情况的变化,但我很难过。这段代码对我来说功能完全正常,而且WAS按预期工作。ADO.NET实体框架SaveChanges不起作用

任何人有任何想法?下面是代码:

using (var pe = new ProposalEstimateEntities()) 
{ 
    var tmc = GetToolingAndMaterialsCost(taskId, Constants.Materials); 

    if (tmc == null) return; 

    tmc.Amount = amount; 
    pe.SaveChanges(); 
} 

的TMC变量保存在方法调用后ToolingAndMaterialsCost实体对象,所以没有必要将对象添加到上下文。 SaveChanges()应该用新金额保存对象,但不保存。没有例外被抛出。代码执行起来很愚蠢,很快乐,但是数据库没有任何变化,当我返回到显示数据的控件时,旧的预编辑数据就在那里。

这是非常令人沮丧的,任何帮助将不胜感激。

迈克

回答

1

tmc如何在没有引用ObjectContext'pe'的情况下加载?看起来你可能会从不同的上下文中加载它?

如果是这样,那是行不通的。上下文跟踪已更改的实体。你的'pe'上下文没有跟踪任何实体的外观,因为它除了在SaveChanges调用中外没有被引用。

+0

正确,用于加载实体的上下文不同于SaveChanges调用中使用的上下文。我将tmc对象添加到该上下文,并且工作正常。 – flyfisher1952 2010-10-26 19:23:35

0

我会通过瓦特/调试,以确保TMC不为空步骤。如果tmc确实是一个带有Amount字段的实体对象,那么它应该可以正常工作,并且问题可能在其他地方。如何回合GetToolingAndMaterialsCost方法的代码?

0

Doh!

对GetToolingAndMaterialsCost的调用使用与方法中不同的ProposalEstimateEntities对象,因此我只是将实体对象添加到数据上下文,并且它工作正常。当我重构时,自我感觉很好。