2011-09-06 90 views
0

我有一個帶有一些文本框和保存按鈕的Windows窗體。當表單加載時,文本框將填充來自我模型中實體的數據。當用戶點擊保存按鈕時,每個文本框中的值被寫回實體,然後調用SaveChanges來將數據提交到數據庫。只保存已在實體框架中更改的字段4

我想知道的是什麼是檢查表單是否包含更改的最佳方法?如果它不包含變化,那麼我不需要調用SaveChanges,我可以保存將記錄寫回數據庫。如果它包含更改並且用戶沒有點擊保存按鈕,我想讓用戶確認這些更改不需要保存。

我想也許我可以只更新實體的字段,然後在調用SaveChanges之前檢查它的State屬性,但是這會失敗,因爲即使使用相同的值更新任何字段也會導致實體被標記爲已修改。

所以,我的問題是,在調用SaveChanges之前檢查表單實際上是否進行了更改的最佳方法是什麼?

感謝,

馬特

+0

你使用Entity Framework的什麼風格的編程?數據庫優先(使用視覺設計師/模型)?代碼優先? –

+0

我不得不使用數據庫第一種方法 – Matt

回答

0

您可以檢查實體狀態。只需將文本框中的數據保存到實體,並查看EntityState是否爲EntityState.Unchanged

詳情點擊這裏:http://msdn.microsoft.com/en-us/library/system.data.entitystate.aspx

+1

感謝您的答覆。不幸的是,即使沒有進行任何更改,當單擊「保存」時,我的所有文本框都會被寫回實體。這意味着所有實體的屬性都設置爲具有修改狀態。 – Matt

0

實際更新的領域,即使與前一個統計作爲修改的實體,在大多數情況下,這是正確的業務規則相同的值。

你可以做的是保留用於填充表單字段的原始對象的副本,並使用相等比較器將其與當前對象進行比較。這並不漂亮,但在特定情況下可以完成工作,因爲您無法依賴對象狀態管理員的修改意見。

+0

感謝您的回覆。我一直在想我必須這樣做。我很驚訝這是正確的業務規則,因爲以下原因:如果用戶正在通過記錄分頁來嘗試查找某些內容,那麼每個記錄都必須寫回數據庫。我認爲唯一的選擇是提示用戶並詢問他們是否想要保存或實施您描述的系統。或者我的架構完全錯誤!再次感謝您的回覆。 – Matt