正在验证导航属性、错误或功能



我在验证导航属性时遇到问题。我不知道这是一个bug,还是没有像我预期的那样工作。

当你有一个导航属性需要他的外键(在我的例子中是int类型)时,成功地添加了验证器,并且由于int不能为null,它被分配了默认值0,但当实体被验证时,由于该属性的值为(0),它被认为是正确的。我预计该实体无效。

这是错误还是正确的行为?

问候。

这是一个好问题。我不认为这是一个bug或功能。我也不会考虑异步验证选项。

相反,我会在FK(或属性)上添加一个自定义验证,声明FK属性为0时无效。是的,这意味着实体在创建时处于无效状态。对此无能为力。您使用"0"作为sentinel值,意思是">我还不知道"。验证意味着">…并且实体在我知道之前是无效的。">

顺便说一句,Breeze不能认为0是无效的。这可能是相关实体的有效FK。

这个问题并非FK独有。当创建一个"数量=0"的新订单行项目时,您有它,并且您的业务规则规定它必须大于0。该类型要求您指定一些内容,但您无法提供正确的答案先验。同样,Breeze不能认为"0"是一个错误的值。您必须指定。

在这两种情况下都没有本身的错误。两者都需要额外的开发人员注意"做正确的事情"。

这是个好问题。

如果不执行到数据存储/数据库的往返,Breeze实际上无法单独验证外键,如果执行了,验证将变成异步操作。目前,breeze不支持异步验证,但在某些情况下,这可能正是您想要的。

我们需要解决异步验证的一些问题。最重要的是,在第一次验证完成之前,可能会发生另一个操作,如保存或重新查询,或对fk字段进行另一次更改。这些都可以处理,但还有额外的复杂性。

如果您认为这将是一个有用的添加,请将其添加到Breeze UserVoice中。我们认真对待这些意见书。

最新更新