2012-03-28 120 views
0

唯一的例外是我們有幾個頁面可以從同一個EntitySet中檢索項目。如果我在一個頁面上添加一個新的實體,我需要將其添加到這兩個EntitySet的收集和MyCollection的:EF:在集合中添加新項目並通知所有其他集合添加了新項目

Context.EntitySet.Add(item); 
myCollection.Add(item); 

什麼是通知新的項目被添加(或刪除)其他頁面的最佳方式?編輯實體沒有問題,因爲所有頁面都可以毫無問題地獲得更改通知。

+0

你能夠使用'Context.EntitySet'而不是'myCollection'的不同實例嗎?爲什麼要創建一個平行集合來存儲實體? – 2012-03-28 22:51:21

+0

你讓我驚訝的想法直接綁定到EntitySet,在所有的材料,我讀過/看過這是從來沒有建議的選項。無論如何,我也可以使用IEnumerable 來做你的建議,我只需要從每個虛擬機引用相同的實例。問題:如果我總是查詢相同的集合,我將如何從數據存儲中獲取新數據? – Goran 2012-03-29 21:21:40

回答

0

而不是綁定到IEnumerable<T> myCollection的不同實例,推薦的方法是直接綁定到Context.EntitySet<T>EntitySet<T>實現INotifyCollectionChangedINotifyPropertyChanged接口。當綁定到EntitySet<T>的同一個實例時,可以通過響應EntitySet<T>.CollectionChanged事件來向每個頁面通知更改。例如:

// Page 1 
_myCollection = Context.EntitySet<MyItem>(); 
_myCollection.CollectionChanged += MyItemsChanged; 

... 

// Page 2 
_myCollection = Context.EntitySet<MyItem>(); 
_myCollection.CollectionChanged += MyItemsChanged; 

當任何頁面添加或從集合中刪除時,通知所有頁面。

關於您的評論,IEnumerable<T>未實現INotifyCollectionChanged接口,並且不發佈任何更改通知。最好的結果來自直接使用EntitySet<T>

+0

我剛剛舉了一個IEnumerable 的例子,因爲它可以用來構造任何其他集合類型(前ObservableCollection )。儘管如此,你的方法還不清楚。如果我總是綁定到相同的源(在你的情況下,EntitySet ,這意味着數據只能從數據庫中檢索一次。我何時以及如何查詢新數據,這些數據是由網絡上的其他用戶修改的? – Goran 2012-03-29 22:42:25

相關問題