EF导航属性不会引发OnPropertyChanging和OnPropertyChanged事件。
在查看实体框架自动生成的代码时,一个简单的属性将有一个如下所示的setter:
Set
OnNameChanging(value)
ReportPropertyChanging("Name")
_Name = StructuralObject.SetValidValue(value, false)
ReportPropertyChanged("Name")
OnNameChanged()
End Set
但是,导航属性有一个这样的setter:
Set
If (Not value Is Nothing)
CType(Me,EntityWithRelationships).RelationshipManager.InitializeRelatedCollection(Of DataType)("MyDatabase.FK_FKTable_PrimaryKeyTable", "FKTable", value)
End If
End Set
似乎应该调用导航属性只调用4个更改通知方法。您是否对以何种方式实施EF生成器有任何见解?是否有选项可以启用通知或解决方案?另外,我认为编辑设计器生成的代码是不好的做法,对吗?
感谢。
答案 0 :(得分:2)
OnPropertyChanging和OnPropertyChanged事件是让ObjectStateManager知道对象的某些属性发生了变化所必需的。
在导航属性的情况下,不需要这样做,因为RelationshipManager在InitializeRelatedCollection方法中执行必要的操作。
这是EntityCollection和EntityReference机制的一部分
任何代码生成器运行后,将丢弃* .Designer.cs文件的任何编辑。
您可以按照T4 templates所述尝试自定义here。