1

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

-2147483647 至 2147483647。

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

谢谢,-史蒂夫

4

1 回答 1

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));
        }

如果变量为空,则标志设置为真。所以,是的,它偏离了位数(参见:ToString().Length)。这似乎没有任何意义,因为 MySql 不使用数据类型的长度属性来确定基于整数的值的位数。

这是亚音速 2.2。

于 2010-01-19T23:13:43.047 回答