2014-03-14 77 views
0

使用EF6 Framework4.5 - 創建我的第一個n層應用程序和第一個EF體驗。我有CRUD工作,但有一個問題,我有一個工作環繞,但不喜歡它。一定會有更好的辦法。阻止分離的實體框架對象中的空更新

當數據對象從我的UI層返回到DAL層時,它已被分離,所以我將EntityState標記爲「已修改」。但隨後它會更新數據庫中的所有列。未在窗體視圖中加載(並未提交)的值顯然爲空,並在db中更新爲這樣的值。

1)我的第一個解決方案確實工作: 商店的形式被提交時,在通過該對象更新編輯的值UI層和環會話的對象。因此,原始值將不變地傳回並更新爲原始值。但我認爲這不是最好的做法。

2)的解決方案,我想,我想: 我打電話的SaveChanges之前通過返回的對象和標誌唯一的非空值「IsModified」的所有值尋找在DAL層的輔助功能循環。

我在C#中找到了關於如何檢查更改值但不爲null的示例。 (反正我還是一個vb的人,不要恨)


A)解決方案#2是一個很好的方法嗎?

B)有沒有人可以幫助我?

謝謝。

順便說一句,這是我最好的刺到目前爲止(在「CurrentValues」錯誤)

Public Overridable Function MarkEntriesModified(entity As Object) 

    Dim dbEntityEntry = DbContext.Entry(entity) 

    'Ensure only non-null values are inserted 
    For Each [property] In dbEntityEntry.CurrentValues.PropertyNames 
     If Not IsDBNull(dbEntityEntry.CurrentValues.GetValue(Of Object)([property])) Then 
      dbEntityEntry.[Property]([property]).IsModified = True 
     End If 
    Next 
    Return entity 

回答

0

試試這個架構。所以,如果你使用EF,那麼我想你已經更新了edmx並正確地表示了你的數據庫對象。

例如:假設你宛在客戶表

  • 更新客戶數據創建一個Customer類。

  • 當您提取特定客戶時,獲取客戶創建的
    實例。

  • 通過這個實例的UI

  • ,並通過實例回業務層,以節省

這樣你不鬆之間什麼。

some sample code

相關問題