2010-10-26 152 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對象,因此我只是將實體對象添加到數據上下文,並且它工作正常。當我重構時,自我感覺很好。