实体框架:跟踪EntityCollection中的集合更改

时间:2016-09-14 14:42:43

标签: c# wpf entity-framework mvvm entitycollection

我正在使用实体框架6,启用了更改跟踪和延迟加载,所有属性都是虚拟的,以提高更改跟踪性能(通过使用自我跟踪实体),因此默认情况下EF创建EntityCollection<TEntity>以包含导航属性实体列表。

然而事情是EntityCollection没有实现INotifyCollectionChanged,所以我无法为CollectionChanged事件添加处理程序,这是我想要实现的。

详细地说,我想在更改集合时更改另一个属性(即添加或删除项目)。

导航属性被定义为ICollection<TEntity>,我没有初始化为某个值(如果我尝试实例化导航,EF会通过创建新的EntityCollection<TEntity>自行处理它例如,ObservableCollection<TEntity>属性,我收到错误。)

我还尝试创建EntityCollection<TEntity>的扩展名,如:

public class ObservableEntityCollection<TEntity> : EntityCollection<TEntity>,  INotifyCollectionChanged where TEntity : class { ... }

并覆盖Add,Remove和Clear方法,如下所示:

public override void Add(TEntity item)
   {
       base.Add(item);
       OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
   }

然而前面提到的方法不是虚拟的,所以我不能真正覆盖它们(也不能隐藏它们,我不相信它会起作用)。

我也知道在mvvm模式中使用POCO对象作为模型并不是最好的解决方案,但这不是问题的范围。

提前感谢您的帮助。

0 个答案:

没有答案