我有一個基於ObservableCollection的數據網格中顯示的EF數據庫上下文。用戶可以編輯網格,並且全部顯示正常。查找Observable Collection中更改的項目
但是我現在需要將數據發送回數據庫。我不想將集合中的所有項目都發送到我的保存方法,所以我只能找到已在集合中進行更改的項目?
我有一個基於ObservableCollection的數據網格中顯示的EF數據庫上下文。用戶可以編輯網格,並且全部顯示正常。查找Observable Collection中更改的項目
但是我現在需要將數據發送回數據庫。我不想將集合中的所有項目都發送到我的保存方法,所以我只能找到已在集合中進行更改的項目?
您可以使用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
嗨,謝謝,請看我對@Jens的看法,爲什麼我認爲EF不適合我。但是感謝我將要測試的這個解決方案。有沒有辦法解決我的EF問題? –
了,更換項目4您嘗試使用'DbContext.SaveChanges'保存所有內容並遇到性能問題?這些框架通常非常聰明,可以避免不必要的工作。 – Jens
我同意@Jens,如果你沒有在EF中做任何配置更改,它應該跟蹤實體的變化並決定是否應該保存。 – chameleon86
如果通過「發送到數據庫」,您的意思是簡單地將實體保存到本地數據庫,那麼我同意@Jens。但是,如果您在遠程服務器上使用數據庫(例如,通過_WCF_服務),並且您只想傳輸髒實體以減少網絡流量,則「ObservableCollection」中沒有內置功能來跟蹤對其項目的更改。你可以看看['BindingList '](https://msdn.microsoft.com/en-us/library/ms132679(v=vs.110).aspx)(及其ListChanged事件)。或者,如果可能的話,創建空的_EF_上下文,用初始對象填充它,並利用其跟蹤機制。 –
Grx70