实体框架-更新父实体上相关实体集合属性值的总和



如何有效地更新父EntityObject属性,该属性仅暴露相关子实体集合属性的总和?我需要在任何时候在任何子实体的属性值的变化在父更新。

一个例子:我有一个父实体对象"Company"和一个相关子对象"Employee"的集合。它们在EF中相互关联(一个公司到一组员工)。在Employee部分类中,我添加了一个自定义计算属性"Salary",在Company部分类中,我添加了一个自定义属性"TotalSalaries"。

现在,如果任何Employee Salary属性被更新为一个新值,我想立即更新Company对象属性totalsalary值。

每当Employee属性发生变化时,我总是在Company对象中运行一个完整的查询,如:

TotalSalaries = Me.Employees.Sum(Function(x) x.Salary)

…这看起来是一件非常低效的事情,特别是如果Employee类中的所有自定义属性值都通过循环(例如,上面的查询被反复运行)来更改。

属性更新能更有效地反映在父类中吗?

我明白了。在Employee类上,我可以在类级PropertyChanging事件中捕获原始属性值:

Private Sub employee_PropertyChanging(ByVal sender As Object, ByVal e As PropertyChangingEventArgs) Handles Me.PropertyChanging    
    Dim propBeignChanged As String = e.PropertyName
    If propBeignChanged = "Salary" Then
        OriginalValue = CType(sender, Employee).Salary  'store the current value temporarily to a variable
    End If
End Sub

然后我可以在类级PropertyChanged事件或属性特定的On[Property]Changed事件中获得新值,计算临时存储的原始值的差异,并将差异传递给父对象。

Private Sub OnSalaryChanged()
    Dim diff as Double = Me.Salary - OriginalValue 
    'and finally pass diff to the parent object for updating its total...
End Sub

我相信这一定是一个比查询整个EntityCollection快得多的方法。

相关内容

  • 没有找到相关文章

最新更新