【问题标题】:EF Navigation properties don't raise OnPropertyChanging and OnPropertyChanged EventsEF 导航属性不会引发 OnPropertyChanging 和 OnPropertyChanged 事件
【发布时间】:2011-04-25 01:08:15
【问题描述】:

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

查看实体框架自动生成的代码时,一个简单的属性将具有如下所示的 setter:

    Set
        OnNameChanging(value)
        ReportPropertyChanging("Name")
        _Name = StructuralObject.SetValidValue(value, false)
        ReportPropertyChanged("Name")
        OnNameChanged()
    End Set

但是,导航属性有一个这样的设置器:

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

谢谢。

【问题讨论】:

    标签: .net vb.net entity-framework


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多