我正在从数据库中检索一个具有某些属性的实体。
不允许其中一个属性在数据库中不是空字符串。即使不为null,它也可以是空字符串""
。
在EF映射中,适当性的验证如下:
this.Property(t => t.ColumnName)
.IsRequired()
.HasMaxLength(50);
问题在于,当我尝试使用Breeze保存更改时,它会为具有等级ColumnName
等于空字符串的元素返回错误。(说"ColumnName is required"
)。
这是否被接受?仅当ColumnName
为null
或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
答案 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");