【发布时间】:2014-07-04 13:21:07
【问题描述】:
我有一个导航属性,我添加了一个自定义验证器。
保存实体时验证器触发正常。但是,从导航属性中添加/删除实体时它不会触发。
我应该订阅 propertyChanged 事件,还是有其他方法来处理这个?
另外,为什么每个属性都没有 propertyChanged 事件,而不必订阅任何属性更改?
【问题讨论】:
标签: breeze
我有一个导航属性,我添加了一个自定义验证器。
保存实体时验证器触发正常。但是,从导航属性中添加/删除实体时它不会触发。
我应该订阅 propertyChanged 事件,还是有其他方法来处理这个?
另外,为什么每个属性都没有 propertyChanged 事件,而不必订阅任何属性更改?
【问题讨论】:
标签: breeze
有两种导航属性,标量和非标量。标量属性类似于“Order.Customer”,其中一个订单有一个与之关联的客户。在这种情况下设置或更改客户将触发 entityAspect.propertyChanged 事件。
对于像“Customer.Orders”这样的非标量属性,访问该属性会返回与客户关联的订单数组。
这始终是同一个数组。可以从中添加或删除订单,但返回的数组本身始终相同。因为数组本身永远不会更改,所以不会为这些操作触发属性更改。
但是您可以观察阵列本身的变化,请参阅arrayChanged event 在微风 Api 文档中。
至于为什么没有单独的事件可以注册以仅在特定属性更改时触发,原因是当前机制支持您执行此操作的能力,同时允许您使用的那些用例希望查看实体的“所有”更改,而无需注册可能有数万个事件。
请记住,实体属性级别事件(如果存在)必须在缓存中注册的实体数量(100 个或 1000 个)乘以实体上的属性数量 (5-50)。
这里描述的大部分内容对于跨多种编程语言的多种环境中的实体更改跟踪来说是相当标准的。我们并没有试图重新发明这个想法,而是简单地重新实现了一个相当普遍的标准。
【讨论】: