我观察到当我将实体添加到另一个实体的集合时,不会调用第二个实体的验证器。
我希望在调用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();
}
});
答案 0 :(得分:1)
通过添加子项不会自动更改父项,因为父项的数据属性不会更改。这是技术原因。
有时(通常是?)模型语义表示通过对子项的任何添加/删除/更改来更改父 。这并不总是正确的,这就是Breeze不会自动传播变化的原因。但它通常是正确的...我认为如果您在元数据中将此指定为所需行为,Breeze将为您提供支持将是一个好主意。你不是唯一想要这个的人。
我添加了a User Voice suggestion for this idea;如果它(并添加你的评论),如果它对你很重要,请投票赞成。
同时,在entity initializer中,您可以订阅父集合中的更改以及该集合的项目,并让它们将父项设置为“已修改”状态(parent.entityAspect.setModified()
)。现在我恐怕不得不这样做。