2012-03-28 62 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

相关问题