2013-06-05 162 views
4

我正在使用Visual Studio 2012.我在本地數據庫(巧妙地命名爲Database1)中有一個非常簡單的Products表。它有兩個字段:id和Name。我預裝了一些測試數據。實體框架不會將數據刷新到數據庫

以下代碼應更新第一個產品的名稱。在內部,它的確如此。我可以檢索所有產品並查看第一個人的姓名是「襯衫」。但是這個改變永遠不會被刷新到數據庫。該記錄從不更新。檢查數據庫顯示該名稱未被更改。

我的問題很簡單:爲什麼更改沒有發送到數據庫?

using (var context = new Database1Entities()) 
{ 
    var products = context.Products; 

    products.First().Name = "Shirt"; 
    context.SaveChanges(); 
} 

在此先感謝。

= = = = = = = = = = = = = = = = - = - = - = = = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =

編輯:

我盡我所能在這裏輸入完整的代碼和輸出。但是,無論我做什麼,我都會繼續收到「您的帖子似乎包含未正確格式化的代碼」錯誤消息。 30分鐘後,我放棄了。

編輯:

代碼和輸出是在這裏:http://pastebin.com/GmQtwAND

+0

您是否確定在上下文中啓用了更改跟蹤? – dksh

+0

但是你是否在改變任何值?襯衫=襯衫看起來像我一樣... – ErikEJ

+0

是的,context.Configuration.AutoDetectChangesEnabled = true。 此外,我預先加載到數據庫中的初始值是「Hat」,即使將其設置爲「Shirt」後,該值仍保留在數據庫中。 –

回答

3

我發現了這個問題......及其解決方案。

數據庫文件的「複製到輸出目錄」屬性被設置爲「始終複製」。這當然意味着每次構建應用程序時,都會將新副本放入Bin目錄中。解決方法是將其設置爲「如果更新,則複製」。衛生署。

換句話說,這些變化在數據庫中一直存在,但是當應用程序重建時數據庫被破壞了。

2

嗯,這可能意味着你不跟蹤變化,你怎麼樣嘗試設置狀態來 - >修改,看看它是否是上班:

var product = products.First(); 
product.Name = "Shirt"; 
product.State = EntityState.Modified; 
context.SaveChanges(); 

如果你想啓用它的背景,你可以做這樣的:

context.Configuration.AutoDetectChangesEnabled = true; 
+1

謝謝。 「產品」沒有「國家」財產。至少我沒有看到。而且,是的,context.Configuration.AutoDetectChangesEnabled = true。順便說一句,「SaveChanges()」返回1,我認爲這是更新記錄的計數。 –

相關問題