2013-10-29 60 views
1

我正在從數據庫中檢索具有某些屬性的實體。Breeze如何保存空字符串

其中的一個屬性不允許在數據庫中不爲空字符串。儘管不是null,它可以是一個空字符串""

在EF映射的正當性進行驗證,如:

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

的問題是,當我試圖挽救與微風它返回一個錯誤,對於具有正當性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 
+0

和元數據'{\「名稱\」:\「ColumnName \」,\「type \」:\「Edm.String \」,\「fixedLength \」:\「false \ 「maxLength \」:\「50 \」,\「unicode \」:\「true \」,\「可空\」:\「false \」}' – razvanz

回答

1

這有什麼好做微風如何保存數據。

您遇到的是Breeze的驗證邏輯。 Breeze默認將空字符串視爲空值以驗證「required」字段。您可以通過替換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"); 
+0

我可以在哪裏替換Validator? – razvanz

+0

最佳時間將在Breeze加載後立即啓動;那麼只需使用breeze.Validator.required = ... –

+0

我正在修改元數據檢索後所需的Validator權限。在調試器中,我可以看到仍然使用了舊版本的驗證器。瀏覽源代碼我發現這個'if(ctx && ctx.allowEmptyStrings)返回true;'我想可能把'ctx.allowEmptyStrings'的值設置爲true會更合適...... – razvanz