Breeze如何保存空字符串

时间:2013-10-29 12:32:04

标签: entity-framework-5 breeze

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

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

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

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

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

这是否被接受?仅当ColumnNamenullundefined时才会抛出错误?

错误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

1 个答案:

答案 0 :(得分:1)

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

您遇到的是Breeze的验证逻辑。为了验证“必需”字段,Breeze默认将空字符串视为空值。您可以通过替换Breeze的必需验证器来简单地将其视为“not null”。

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");