0

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

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

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

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

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

...这看起来是一件非常低效的事情,特别是如果 Employee 类中的所有自定义属性值都通过循环进行更改(上述查询一遍又一遍地运行)。

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

4

1 回答 1

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

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 更快的方法。

于 2013-06-03T10:59:22.203 回答