EF导航属性不会引发OnPropertyChanging和OnPropertyChanged事件

时间:2011-04-25 01:08:16

标签: .net vb.net entity-framework

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生成器有任何见解?是否有选项可以启用通知或解决方案?另外,我认为编辑设计器生成的代码是不好的做法,对吗?

感谢。

1 个答案:

答案 0 :(得分:2)

OnPropertyChanging和OnPropertyChanged事件是让ObjectStateManager知道对象的某些属性发生了变化所必需的。
在导航属性的情况下,不需要这样做,因为RelationshipManager在InitializeRelatedCollection方法中执行必要的操作。
这是EntityCollectionEntityReference机制的一部分 任何代码生成器运行后,将丢弃* .Designer.cs文件的任何编辑。 您可以按照T4 templates所述尝试自定义here