使用数据库查询进行Breeze Server Side Validation

时间:2018-01-30 23:59:14

标签: javascript c# validation breeze

最好的模式是什么,使用breeze,验证服务器端的Save,它必须查询数据库,并让它" bubble"到客户端?

服务器端验证必须查询数据库以确定保存是否有效,即:

C#psuedo-code:

int count = _contextProvider.Context.MyObject.Where(x => x.Something == 1).Count();
if(count != 0) {
  throw new Exception("Cannot delete My Object, records exist");
}

理想情况下,我希望能够在JavaScript客户端上执行类似的操作 -

entity.entityAspect.validateEntity();

并让它触发服务器端验证(但对所有建议开放!)

我还需要这样做以防止由于实体处于无效状态而发生SaveChanges(即使没有手动调用validateEntity)。

1 个答案:

答案 0 :(得分:0)

如果您可以执行server-side validation,则可以覆盖BeforeSaveEntities方法并在那里进行验证。您将创建users: (_, args) => { const where = omit(args, ['limit']) const limit = args.limit || 10 return User.find(where).sort({'someField': -1}).limit(limit).exec() } 个对象并抛出EntityError,这会导致保存被拒绝。

如果您想在客户端上进行验证,则需要add a custom validator到您的应用,并将其注册到Breeze。然后当您尝试EntityErrorsException时,Breeze会自动调用您的验证器。

问题在于验证器需要进行AJAX调用,这是异步的,Breeze不直接支持异步验证器。有关如何实现此功能的提示,请参阅this answer