1

我正在从数据库中检索具有某些属性的实体。

属性之一不允许在数据库中为非空字符串。即使不是 null 它也可以是一个空字符串""

在 EF 映射中,适当性的验证如下:

this.Property(t => t.ColumnName)
            .IsRequired()
            .HasMaxLength(50);

问题是,当我尝试使用 Breeze 保存更改时,它会为属性ColumnName等于空字符串的元素返回错误。(说"ColumnName is required")。

这是公认的行为吗?ColumnName只有当 the will be nullor时才应该抛出错误undefined

Breezejs 抛出的错误:

valError: Error
    entityErrors: Array[5]
        0: Object
            entity: Object
                ColumnName: function dependentObservable() {
                    __ko_proto__: function (evaluatorFunctionOrOptions, evaluatorFunctionTarget, options) {
                    _latestValue: ""
                    _subscriptions: Object
                    ...
                ...
                entityAspect: ctor
                __proto__: Object
            errorMessage: "'ColumnName' is required"
            errorName: "required"
            isServerError: false
            propertyName: "ColumnName"
            __proto__: Object
4

1 回答 1

1

这与 Breeze 如何保存数据无关。

您遇到的是 Breeze 的验证逻辑。Breeze 默认将空字符串视为空值,以验证“必填”字段。您可以通过替换 Breeze 的 required 验证器来更改此设置,以简单地将 required 视为“非空”的含义。

Validator.required = function (context) {
    var valFn = function (v, ctx) {
        return v != null;
    }
    return new Validator("required", valFn, context);
};
// register the new validator so that metadata can find it. 
Validator.registerFactory(Validator.required, "required");
于 2013-10-29T16:51:39.107 回答