Breeze 保存时出现验证错误

Breeze 保存时出现验证错误,breeze,Breeze,使用Breeze使用SaveChanges()保存时,如果我有必填字段,则在执行简单更新时会出现错误 例如 我有一个带有名称和电子邮件字段的用户表,其中电子邮件字段不是必需的 我可以显示用户名列表(但不想显示电子邮件) 显示正常,但从未调用save-我在JavaScript中遇到一个验证错误: 由于验证错误而未保存:“电子邮件”是必需的 但这应该只是对我已经改变的领域进行简单的更新,不应该对电子邮件做任何事情 奇怪的是,如果我只是更改列表中的第一项,就不会出错 有什么想法吗 HTML如下所示:

使用Breeze使用
SaveChanges()
保存时,如果我有必填字段,则在执行简单更新时会出现错误

例如

我有一个带有
名称
电子邮件
字段的用户表,其中
电子邮件
字段不是必需的

我可以显示用户名列表(但不想显示电子邮件)

显示正常,但从未调用save-我在JavaScript中遇到一个验证错误:

由于验证错误而未保存:“电子邮件”是必需的

但这应该只是对我已经改变的领域进行简单的更新,不应该对电子邮件做任何事情

奇怪的是,如果我只是更改列表中的第一项,就不会出错

有什么想法吗

HTML如下所示:

<a href="#" data-bind="click: save">Save</a>
<ul data-bind="foreach: modules">
<li >
    <form>
        <input type="checkbox" data-bind="checked: IsRunning" />
        <input type="text" data-bind="value: ModuleName, css: { done: IsRunning }" />
    </form>
  </li>
 </ul>

嗯。。。您说电子邮件不是必需的,但元数据认为是必需的。您可以通过查看此属性的元数据来确认这一点吗?代码看起来像这样

var userType = myEntityManager.metadataStore.getEntityType("User");
var emailProp = userType.getProperty("email");
var isRequired = !emailProp.isNullable;
如果元数据认为该字段是必需的,则可能在服务器上将其设置为该字段。因此,请查看您的EF模型,并检查[Required]属性是否尚未添加到此属性。此外,在数据库中检查此字段是否不可为空

另一项需要注意的是,默认情况下,breeze将在任何保存之前尝试验证服务器上的整个实体,甚至是那些未被触摸的字段,即使只有修改过的字段将实际得到更新。这是故意的

但是,您可以通过如下设置entityManager的“validationOptions”来抑制此行为:

var vo = new breeze.ValidationOptions({ 
    validateOnSave: false,
    validateOnQuery: false, // not needed here but shown for completeness
    validateOnAttach: true  // not needed here but shown for completeness
});
myEntityManager.setProperties({ validationOptions: vo });

谢谢你的回复。对不起,我的问题不清楚。DB需要电子邮件,但未在应用程序中显示或使用。我现在明白了验证正在妨碍我,所以我(现在)通过关闭验证解决了这个问题。但奇怪的是,email字段确实有一个值——但它没有显示给用户,因此应该会导致验证错误——是吗?breeze实际上不知道您在UI中呈现了什么,它只知道模型。如果该属性在元数据中并且是必需的,则默认情况下,将对其进行验证。这个想法是,仅仅因为它在db上并不意味着它是有效的。但是,如果不需要该属性,可以将其从模型中排除。这有意义吗?重读您的评论,您是说验证实际上是不正确的,它报告了一个必需的验证错误,即使它包含数据,还是验证报告了其他错误?
var vo = new breeze.ValidationOptions({ 
    validateOnSave: false,
    validateOnQuery: false, // not needed here but shown for completeness
    validateOnAttach: true  // not needed here but shown for completeness
});
myEntityManager.setProperties({ validationOptions: vo });