Entity Framework 6.x,带有DbContext数据库的第一个基于模型(使用Devart的Entity Developer构建(尽管我认为这与此无关))。
数据模型和与之相关的所有业务代码都在其自己的单独项目中,并且所有实体都设置为实现INotifyPropertyChanged和Changing。 PropertyChanged和PropertyChanging事件在每个实体的单独部分类中处理。
当我编辑现有的行数据时,PropertyChanged事件会被触发,我可以根据刚刚更改的那个字段的更改来设置其他字段的值。这一切都完全按照我的预期运作。但是,一旦我转移到实际上将是新记录的PropertyChanged事件没有被解雇,所以我构建的逻辑使编辑更容易没有为新记录实现。
我在PropertyChanged事件上放了断点,我看到它在编辑时触发但在新行上没有。
我认为在某个地方,我已经错过了一些明显的东西,但我想不出来。任何人都可以告诉我我需要做些什么才能将其应用于新记录以及编辑现有记录?我通常用vb编写代码,但是理解C#(至少是基础知识!)
由于
答案 0 :(得分:2)
好吧,我找不到关于这个主题的任何现代信息,但据我所知,实体框架实体集合do not implement INotifyCollectionChanged或任何其他集合通知机制。
INotifyPropertyChanged旨在通知有关属性值的更改。当你有像
这样的集合属性时public ICollection<MyEntity> SomeEntities
{
get {...}
set {... PropertyChanged(this, ...);}
}
并且有人使用它将实体添加到其中
entityContainer.SomeEntities.Add(new MyEntity());
然后PropertyChanged
不会被提升,因为实际属性仍然是同一个集合 - 不使用setter方法。
ICollection<MyEntity>
本身必须实现INotifyCOllectionChanged
界面(如ObservableCollection<T>
)
如果您希望在操作的不同部分之间使用通知机制,则应将查询包装到某些INotifyCollectionChanged
实施者中,这些实现者委派删除和添加到DataContext - EntityFramework EntityCollection Observing CollectionChanged。