3

我在验证导航属性时遇到问题。我不知道这是一个错误还是没有按我的预期工作。

当您的外键(在我的情况下为 int 类型)需要导航属性时,成功添加了验证器,并且作为 int 不能为空,分配默认值 0,但在验证实体时,作为属性具有值 (0),给出正确的值。我预计该实体无效。

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

问候。

4

2 回答 2

1

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

相反,我会在 FK(或属性)上添加自定义验证,声明 FK 属性在为 0 时无效。是的,这意味着实体在创建时处于无效状态。对此无能为力。您使用“0”作为标记值,​​表示“我还不知道”。验证意味着“ ……在我知道之前,实体是无效的。

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

这个问题并不是 FK 独有的。您在使用“数量=0”创建新订单项目时拥有它,并且您的业务规则说它必须大于 0。该类型要求您指定 SOMETHING ,但您无法先验地提供正确答案。同样,Breeze 不能假设 '0' 是一个坏值。你必须指定。

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

于 2012-12-20T01:02:45.997 回答
0

这是个好问题。

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

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

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

于 2012-12-19T16:28:29.707 回答