我正在使用实体框架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对象作为模型并不是最好的解决方案,但这不是问题的范围。
提前感谢您的帮助。