2010-01-19 113 views
1

因此,我們將SubSonic用作我們的DAL/ORM中的一個項目。一切都運行平穩(數據庫已經存在,所以我們在其上面使用了SubSonic),但是,有時我們會遇到一個例外情況,表明像整數這樣的東西超過了最大長度。在這個例子中,我們的MySql字段是一個int(4)簽名。其中,根據MySQL文檔將允許範圍如下:SubSonic:TableColumn的MaxLength(超出)

-2147483647到2147483647

現在,我的問題,是如何的MaxLength亞音速決定?它是數字的數量嗎?因爲這意味着它只會允許-9999到9999,對嗎?這似乎是一個相當大的差異,我希望情況並非如此,否則我們會遇到很多其他問題。

感謝, 史蒂夫

+0

那麼,如果int(4)是-2147483647到2147483647,那麼4指的是字節數,而不是數位數。 – 2010-01-19 22:44:26

+0

另請參閱http://stackoverflow.com/questions/947406/subsonic-sqlite-float-datatype-cant-save-xxx-exceeds-the-maximum-length – 2010-01-19 22:45:58

+0

更多信息: 無法保存:-field name-超過羅伯特的最大長度4 – StephenPAdams 2010-01-19 22:49:24

回答

0

使用反射器,然後向下鑽取到的ActiveRecord的保存功能(它調用ValidateColumnSettings):

if ((!flag && (column.MaxLength > 0)) && ((column.DataType != DbType.Boolean) && (currentValue.ToString().Length > column.MaxLength))) 
     { 
      Utility.WriteTrace(string.Format("Max Length Exceeded {0} (can't exceed {1}); current value is set to {2}", column.ColumnName, column.MaxLength, currentValue.ToString().Length)); 
      this.errorList.Add(string.Format(this.LengthExceptionMessage, str, column.MaxLength)); 
     } 

標誌設置爲true,如果該變量爲空。所以,是的,這是數字的數字(見:ToString()。長度)。這似乎沒有任何意義,因爲MySql不使用數據類型的長度屬性來確定基於整數的值的位數。

這是SubSonic 2.2。

+0

如果有人想知道,可以通過關閉ValidateWhenSaving屬性來禁用此驗證(將其設置爲false )。它在RecordBase的構造函數中默認啓用。這解決了我們的問題。 如果可以通過SubSonic的配置爲我們生成,那就好了,所以我們可以在我們認爲合適的時候啓用/禁用它。 – StephenPAdams 2010-01-21 16:17:09