我在导航属性验证方面遇到了问题。 我不知道这是一个错误还是不能像我预期的那样工作。
如果你的外键需要导航属性(在我的情况下是int类型)成功添加了验证器,并且作为int不能为null,则被赋予默认值0,但是当验证实体时,因为属性具有值(0),所以给出正确的。我预计该实体无效。
这是一个错误还是正确的行为?
问候。
答案 0 :(得分:1)
是一个好问题。我不认为这是一个错误或功能。我也不会考虑异步验证选项。
相反,我会在FK(或属性)上添加一个自定义验证,声明FK属性在0时无效。是的,这意味着实体在创建时处于无效状态。没有什么可以做的。你使用'0'作为哨兵值意味着“我还不知道”。验证意味着“ ......实体无效,直到我知道。”
顺便说一句,Breeze不能假设0无效。这可能是相关实体的有效FK。
此问题并非FK独有。您在创建新的订单项目时使用'quantity = 0'并且您的业务规则说它必须是> 0。该类型要求您指定SOMETHING,但您无法提供正确答案先验。同样,Breeze不能假设“0”是一个坏的值。你必须指定。
在任一情况下都没有错误本身。两者都需要额外的开发人员注意“做正确的事”。
答案 1 :(得分:0)
这是一个很好的问题。
如果没有执行到数据存储区/数据库的往返,Breeze实际上无法单独验证外键,如果是,则验证将成为异步操作。目前,breeze不支持异步验证,但是,在某些情况下,这可能正是您想要的。
我们需要解决的异步验证存在一些问题。最重要的是,在第一次验证完成之前,可能会发生另一个操作,例如保存或重新查询或对fk字段的其他更改。这些都可以处理,但还有其他复杂性。
如果您认为这是一个有用的补充,请将其添加到Breeze UserVoice。我们认真对待这些提交。