Vb.net 如何在我添加的部分类中实体模型的生成代码中实现OnPropertyChanged事件

Vb.net 如何在我添加的部分类中实体模型的生成代码中实现OnPropertyChanged事件,vb.net,entity-framework,Vb.net,Entity Framework,我使用Devart的Entity Developer构建了一个实体数据模型。这是一个数据库优先的模型,我设置了模板属性来实现INotifyPropertyChanged(和Changing),并为模型中的每个实体创建单独的分部类 随着模型的建立,我现在看到模型中的一些自动生成代码,用于实体的属性,如下所示: Public Overridable Property Rc() As Global.System.Nullable(Of Integer) Get

我使用Devart的Entity Developer构建了一个实体数据模型。这是一个数据库优先的模型,我设置了模板属性来实现INotifyPropertyChanged(和Changing),并为模型中的每个实体创建单独的分部类

随着模型的建立,我现在看到模型中的一些自动生成代码,用于实体的属性,如下所示:

Public Overridable Property Rc() As Global.System.Nullable(Of Integer)
        Get
            Return _Rc
        End Get
        Set
            If (Object.Equals(_Rc, value) = false) Then
              OnPropertyChanging("Rc")
              _Rc = value
              OnPropertyChanged("Rc")
            End If
        End Set
    End Property
    Private _Rc As Global.System.Nullable(Of Integer)
有关InotifyProperty的更多章节已更改和更改:

        #Region "INotifyPropertyChanging Members"

    Public Event PropertyChanging(sender As Object, e As PropertyChangingEventArgs) Implements INotifyPropertyChanging.PropertyChanging

    Protected Sub OnPropertyChanging(propertyName As String)
        RaiseEvent PropertyChanging(Me, New PropertyChangingEventArgs(propertyName))
    End Sub

    #End Region
    #Region "INotifyPropertyChanged Members"

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

    Protected Sub OnPropertyChanged(propertyName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    End Sub
该模型为该实体创建了一个单独的分部类,我假设它应该在该分部类中,我应该放置我想要的任何代码,这些代码将对OnPropertyChanged作出反应。因此,例如,对于上面代码片段中所示的属性(通常以2014年的形式表示一年),我想将另一个实体属性的值设置为2014+5,即2019年

谁能解释一下我该怎么做。如果可能的话,我更喜欢vb,但可以使用c


感谢将来可能会出现这种情况的其他人

我在自己的项目中构建了一个实体模型(因此它实际上是一个独立的数据层),用于我正在构建的两个解决方案。每个实体都有自己单独的分部类,我在其中添加自定义代码。我知道我需要在该部分类中处理PropertyChanged事件,但我一直在努力“查看”哪个属性触发了该事件

结果证明我犯了一个简单但根本性的错误。最初,我创建了以下方法:

Private Sub OnPropertyChangedLogicImplementation(sender As Object, e As EventArgs) Handles Me.PropertyChanged
     Select Case e.PropertyName

    Case 
    End Select

End Sub
它不起作用的原因是我使用了EventArgs,而不是PropertyChangedEventArgs,它根本无法获取我希望能够获取的propertyname

Private Sub OnPropertyChangedLogicImplementation(sender As Object, e As PropertyChangedEventArgs) Handles Me.PropertyChanged
     Select Case e.PropertyName

    Case 
    End Select

End Sub

奇怪的是,在如何做到这一点方面,我几乎找不到直接的例子,因此我提出了最初的问题。希望这能避免其他人浪费时间寻找显而易见的东西(当然,一旦你意识到这是显而易见的!)。

有几点建议:1)你可以直接将所需的逻辑注入生成的代码中,但如果你重新生成实体类型的代码,你就有可能失去它。2) 如果分部类的构造函数不是自动生成的,那么可以为实体创建另一个分部声明,并在构造函数中连接
PropertyChanged
事件的处理程序,尽管这看起来非常脏。3) 您可以使用继承和重写希望更改其行为的属性,但EF很可能无法正确处理派生类型。感谢Kirill的建议。1是不可用的,因为每次重新生成模型时,它都会被覆盖。似乎最有可能的选择是找出实现它的最佳代码。令人烦恼的是,这类事情的例子很少。您是否可以在自己的类中处理事件并检查特定的属性名称?