0

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

我希望在调用 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();
        }
    });
4

1 回答 1

1

由于父项的数据属性没有更改,因此添加子项不会自动更改父项。这就是技术原因。

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

为这个想法添加了用户语音建议;如果它对您很重要,请投票(并添加您的评论)。

同时,在实体初始化器中,您可以订阅父集合中的更改以及该集合中的项目,并让它们将父集合设置为“已修改”状态 ( parent.entityAspect.setModified())。恐怕现在必须这样做。

于 2013-02-12T15:06:00.430 回答