SubSonic:TableColumn的MaxLength(超过)

时间:2010-01-19 22:34:00

标签: c# mysql subsonic subsonic2.2

因此,我们使用SubSonic作为我们的一个项目的DAL / ORM。一切都运行得很顺利(数据库已经存在,所以我们在它上面使用了SubSonic),然而,有时我们会遇到一个异常,说整数超过了最大长度。在这个例子中,我们的MySql字段是一个int(4)签名。其中,根据MySql文档将允许以下范围:

-2147483647至2147483647.

现在,我的问题,MaxLength是如何在SubSonic中指出的?是数字位数?因为这意味着它只允许-9999到9999,对吗?这似乎是一个相当大的差异,我希望事实并非如此,否则我们将会遇到很多其他问题。

谢谢, -Steve

1 个答案:

答案 0 :(得分:0)

使用Reflector,向下钻取到ActiveRecord的Save函数(调用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));
        }
如果变量为null,则

flag设置为true。所以,是的,它已经脱离了数字位数(参见:ToString()。Length)。这似乎没有任何意义,因为MySql不使用数据类型的length属性来确定基于整数的值的位数。

这是SubSonic 2.2。