2016-01-13 80 views
0

我有一個基於ObservableCollection的數據網格中顯示的EF數據庫上下文。用戶可以編輯網格,並且全部顯示正常。查找Observable Collection中更改的項目

但是我現在需要將數據發送回數據庫。我不想將集合中的所有項目都發送到我的保存方法,所以我只能找到已在集合中進行更改的項目?

+4

了,更換項目4您嘗試使用'DbContext.SaveChanges'保存所有內容並遇到性能問題?這些框架通常非常聰明,可以避免不必要的工作。 – Jens

+0

我同意@Jens,如果你沒有在EF中做任何配置更改,它應該跟蹤實體的變化並決定是否應該保存。 – chameleon86

+0

如果通過「發送到數據庫」,您的意思是簡單地將實體保存到本地數據庫,那麼我同意@Jens。但是,如果您在遠程服務器上使用數據庫(例如,通過_WCF_服務),並且您只想傳輸髒實體以減少網絡流量,則「ObservableCollection 」中沒有內置功能來跟蹤對其項目的更改。你可以看看['BindingList '](https://msdn.microsoft.com/en-us/library/ms132679(v=vs.110).aspx)(及其ListChanged事件)。或者,如果可能的話,創建空的_EF_上下文,用初始對象填充它,並利用其跟蹤機制。 – Grx70

回答

0

您可以使用NotifyCollectionChangedAction檢測哪些項目已在ObservableCollection

被改變。然而,僅僅Jens說,最好的辦法是讓EF爲您處理。

乾杯。

ObservableCollection<int> listOfObject = new ObservableCollection<int>() { 1, 2, 3, 4}; 

listOfObject.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(
    delegate (object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
    if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) 
     { 
      Console.WriteLine($"{e.NewItems[0]} just been added to the list at index = {e.NewStartingIndex}"); 
     } 
     if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Replace) 
     { 
      Console.WriteLine($"Replace item {e.OldItems[0]} with {e.NewItems[0]}"); 
     } 
    } 
); 

listOfObject.Add(1); 
listOfObject[2] = 3; 
listOfObject[3] = 1; 

輸出:

1剛剛被添加到所述列表中索引= 4

替換項3 3

用1

+0

嗨,謝謝,請看我對@Jens的看法,爲什麼我認爲EF不適合我。但是感謝我將要測試的這個解決方案。有沒有辦法解決我的EF問題? –