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

时间:2013-05-29 13:42:52

标签: entity-framework parent-child custom-properties

如何有效地更新父EntityObject属性,该属性只显示相关子实体集合属性的总和?每当任何子实体中的属性值发生更改时,我都需要在父级中进行更新。

示例:我有一个父EntityObject“Company”和一个相关子对象“Employee”的集合。这些在EF之间有相互关联(一个公司到员工的集合)。在Employee partial class中,我添加了一个自定义计算属性“Salary”,在Company partial类中,我添加了一个自定义属性“TotalSalaries”。

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

每当Employee属性发生更改时,如果那时我总是在Company对象中运行完整查询,如:

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

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

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

1 个答案:

答案 0 :(得分:0)

我想出来了。在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事件中获取新值,计算与临时存储的原始值的差异,并将差值传递给父对象。 / p>

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要快得多。