因此,我们使用SubSonic作为我们的一个项目的DAL / ORM。一切都运行得很顺利(数据库已经存在,所以我们在它上面使用了SubSonic),然而,有时我们会遇到一个异常,说整数超过了最大长度。在这个例子中,我们的MySql字段是一个int(4)签名。其中,根据MySql文档将允许以下范围:
-2147483647至2147483647.
现在,我的问题,MaxLength是如何在SubSonic中指出的?是数字位数?因为这意味着它只允许-9999到9999,对吗?这似乎是一个相当大的差异,我希望事实并非如此,否则我们将会遇到很多其他问题。
谢谢, -Steve
答案 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。