如何回滚敲除验证错误?

How to rollback knockout validation errors?

我将敲除验证 2.0.3 与 entity framework 6.0 一起使用,但出现意外的验证错误。这是我的工作流程:

第 1 步:(按预期工作)使用添加对话框创建一个新实体并尝试保存新实体。显示验证错误是因为缺少某些属性。这是想要的行为。用户取消对话框,我调用 unitofwork.rollback() 撤消新实体的创建。

第 2 步:打开相同类型的现有实体的编辑对话框。尝试按原样保存它。 => 再次显示步骤 1 中的验证错误!

如何清除第 1 步后的验证错误?

如果我只执行step2,保存动作就可以了。

在一个相关的Whosebug问题中建议使用

errors.showAllMessages(false);

那没有解决我的问题。

相关问题:

为了验证我使用了

validation.group(checkedEntity, { deep: true });

完整对象树还考虑了已检查实体的 entityAspect。 entityAspect 连接到 实体管理器 。该实体管理器包含实体的旧状态。

完整的循环是:

fooInstance => entityAspect => entityManager => entityGroupMap => Foo:... => _entities => 旧实体实例

所以我基本上有两个选择:

  • 不要使用 { deep: true }
  • 确保回滚后实体管理器不再包含旧实体:

entityManager.rejectChanges();

entityManager.clear();