Entity framework 4 EF:在集合中添加新项,并通知所有其他集合已添加新项

Entity framework 4 EF:在集合中添加新项,并通知所有其他集合已添加新项,entity-framework-4,wcf-ria-services,Entity Framework 4,Wcf Ria Services,假设我们有几个页面从同一个EntitySet检索项目。如果在一个页面上添加新实体,则需要将其同时添加到EntitySet集合和myCollection: Context.EntitySet.Add(item); myCollection.Add(item); 通知其他页面新项目已添加(或删除)的最佳方式是什么?编辑实体没有问题,因为所有页面都会毫无问题地收到更改通知。建议的方法是直接绑定到Context.EntitySet,而不是绑定到IEnumerable myCollection的不同实例

假设我们有几个页面从同一个EntitySet检索项目。如果在一个页面上添加新实体,则需要将其同时添加到EntitySet集合和myCollection:

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

通知其他页面新项目已添加(或删除)的最佳方式是什么?编辑实体没有问题,因为所有页面都会毫无问题地收到更改通知。

建议的方法是直接绑定到
Context.EntitySet
,而不是绑定到
IEnumerable myCollection的不同实例
EntitySet
实现
INotifyCollectionChanged
INotifyPropertyChanged
接口。当您绑定到
EntitySet
的同一实例时,每个页面都可能通过响应
EntitySet.CollectionChanged
事件收到更改通知。例如:

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

...

// Page 2
_myCollection = Context.EntitySet<MyItem>();
_myCollection.CollectionChanged += MyItemsChanged;
//第1页
_myCollection=Context.EntitySet();
_myCollection.CollectionChanged+=MyItemsChanged;
...
//第2页
_myCollection=Context.EntitySet();
_myCollection.CollectionChanged+=MyItemsChanged;
在集合中添加或删除任何页面时,都会通知所有页面


关于您的评论,
IEnumerable
没有实现
INotifyCollectionChanged
接口,也没有发布任何更改通知。直接使用
EntitySet
可以获得最佳效果。

您是否能够使用
上下文。EntitySet
而不是
myCollection
的不同实例?你为什么要创建一个并行集合来存储实体?在我读过/看过的所有材料中,直接绑定到EntitySet的想法让我大吃一惊,这从来都不是一个建议的选项。无论如何,我也可以按照你的建议使用IEnumerable,我只需要从每个VM引用相同的实例。问题是:如果我总是查询同一个集合,如何从数据存储中获取新数据?我只是给出了一个IEnumerable的示例,因为它可以用于构造任何其他集合类型(例如ObservableCollection)。不过,我不清楚你的方法。如果我总是绑定到同一个源(在您的案例EntitySet中,这意味着数据只从数据库检索一次。我将何时以及如何查询由网络上的其他用户修改的新数据?