最好的模式是什么,使用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)。
答案 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。