breeze:在更改时验证导航属性

时间:2014-07-04 13:21:07

标签: breeze

我有一个导航属性,我添加了一个自定义验证器。

验证器在保存实体时触发正常。但是,在导航属性中添加/删除实体时不会触发它。

我应该订阅propertyChanged事件,还是有另一种方法来处理它?<​​/ p>

另外,为什么每个属性都没有propertyChanged事件而不必订阅任何属性更改?

1 个答案:

答案 0 :(得分:2)

有两种导航属性,标量和非标量。标量属性类似于&#39; Order.Customer&#39;订单中有一个客户与之关联。在这种情况下设置或更改客户将触发entityAspect.propertyChanged事件。

对于像'Customer.Orders&#39;这样的非标量属性,访问该属性会返回与客户关联的订单数组。

这始终是相同的数组。可以添加或删除订单,但返回的数组本身始终相同。由于数组本身永远不会更改,因此不会为这些操作触发属性更改。

但是,您可以观看阵列本身的更改,请参阅arrayChanged event 在微风Api文档中。

至于为什么没有单独的事件只能在特定属性发生变化时注册才能触发,原因是当前机制支持你这样做的能力,同时允许你在那些用例中使用希望看到所有&#39;对实体的更改,而无需注册可能有数万个事件。

记住实体属性级别事件(如果已存在)必须在您的缓存(100或1000)中的实体数量上注册实体上的属性数量(5) -50)。

此处描述的大部分内容对于跨多种编程语言的多种环境中的实体更改跟踪而言是相当标准的。我们没有尝试重新发明这个想法,但只是重新实现了一个非常普遍的标准。