实体级验证器未触发

时间:2013-02-12 09:15:33

标签: breeze

我观察到当我将实体添加到另一个实体的集合时,不会调用第二个实体的验证器。

我希望在调用savechanges时,添加到子集合会触发父集合上的实体级别验证。

我现在不能写一个测试,但如果需要我今天下午会写。

这是预期的行为还是错误?

entity.OrderLine().arrayChanged.subscribe(function (args) {
        console.log(args);
        if (args.added && args.added.some(function (element) {
            console.log(element.entityAspect.entityState.name);
            return !(element.entityAspect.entityState.isUnchanged() 
                || element.entityAspect.entityState.isDeleted());
        })) {
            console.log("modifico");
            entity.entityAspect.setModified();
        }
        if (args.removed && args.removed.some(function (element) {
             console.log(element.entityAspect.entityState.name);
            return !element.entityAspect.entityState.isAdded();
        })) {
            console.log("modifico");
            entity.entityAspect.setModified();
        }
    });

1 个答案:

答案 0 :(得分:1)

通过添加子项不会自动更改父项,因为父项的数据属性不会更改。这是技术原因。

有时(通常是?)模型语义表示通过对子项的任何添加/删除/更改来更改父 。这并不总是正确的,这就是Breeze不会自动传播变化的原因。但它通常是正确的...我认为如果您在元数据中将此指定为所需行为,Breeze将为您提供支持将是一个好主意。你不是唯一想要这个的人。

我添加了a User Voice suggestion for this idea;如果它(并添加你的评论),如果它对你很重要,请投票赞成。

同时,在entity initializer中,您可以订阅父集合中的更改以及该集合的项目,并让它们将父项设置为“已修改”状态(parent.entityAspect.setModified())。现在我恐怕不得不这样做。